将Json解析为String

马斯·杰米(Mas Jamie)

我想将Json解析为字符串,以将其显示在listView上。我搜索并阅读了许多文章和问题,但找不到解决方案

我已经尝试过以下解析器JSON来源:Android JSON解析教程

    public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

还有另一个来自如何在Android中解析JSON的内容

    DefaultHttpClient   httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost("http://someJSONUrl.com/jsonWebService");
// Depends on your web service
httppost.setHeader("Content-type", "application/json");

InputStream inputStream = null;
String result = null;
try {
HttpResponse response = httpclient.execute(httppost);           
HttpEntity entity = response.getEntity();

inputStream = entity.getContent();
// json is UTF-8 by default
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();

String line = null;
while ((line = reader.readLine()) != null)
{
    sb.append(line + "\n");
}
result = sb.toString();
} catch (Exception e) { 
    // Oops
}
finally {
    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
}

但是在这两种方法中,当我使用字符串Json时,一切都很好,但是当我想从Web API(例如:http : //api.androidhive.info/contacts/读取Json时,出现此错误:

09-27 23:47:11.015: E/AndroidRuntime(28635): FATAL EXCEPTION: main
09-27 23:47:11.015: E/AndroidRuntime(28635): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mas.forcheksulotion/com.mas.forcheksulotion.MainActivity}: java.lang.NullPointerException
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1666)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1682)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.os.Looper.loop(Looper.java:130)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.main(ActivityThread.java:3744)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at java.lang.reflect.Method.invokeNative(Native Method)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at java.lang.reflect.Method.invoke(Method.java:507)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at dalvik.system.NativeStart.main(Native Method)
09-27 23:47:11.015: E/AndroidRuntime(28635): Caused by: java.lang.NullPointerException
09-27 23:47:11.015: E/AndroidRuntime(28635):    at java.io.StringReader.<init>(StringReader.java:46)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at org.json.simple.JSONValue.parse(JSONValue.java:33)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at com.mas.forcheksulotion.MainActivity.onCreate(MainActivity.java:57)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-27 23:47:11.015: E/AndroidRuntime(28635):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1630)
09-27 23:47:11.015: E/AndroidRuntime(28635):    ... 11 more

仍然我不知道在Android上使用Json我应该使用JSONArray或JSONObject还是将Json解析为String?!

马斯·杰米(Mas Jamie)

我发现了问题

两种解决方案都很有用,但是我的错误是关于使用许可。

我应该将其添加到AndroidManifest:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章