Java 分析Android应用程序中的JSON数据时出错

Java 分析Android应用程序中的JSON数据时出错,java,android,json,instagram,Java,Android,Json,Instagram,在我的Android应用程序中,我试图从instagram获取流行媒体,我使用的是本教程中显示的JSONParser类 这是我正在努力工作的代码: private static String urlInst = "https://api.instagram.com/v1/media/popular?client_id="+clientId; public static void Func() { JSONParser jParser = new JSONParser(); J

在我的Android应用程序中,我试图从instagram获取流行媒体,我使用的是本教程中显示的JSONParser类

这是我正在努力工作的代码:

private static  String urlInst = "https://api.instagram.com/v1/media/popular?client_id="+clientId;
public static  void Func() {
    JSONParser jParser = new JSONParser();
    JSONObject json = jParser.getJSONFromUrl(urlInst);
    try {
    JSONArray pics = json.getJSONArray("data");
        for (int i = 0; i < pics.length(); i++) { 
            JSONObject c=(JSONObject) pics.get(i);
            JSONObject user = c.getJSONObject("user");
            String name= user.getString("username");
            JSONObject img=c.getJSONObject("images");
            JSONObject thum=img.getJSONObject("thumbnail");
            String urlOfPic = thum.getString("url");                                  
        }
    } catch (JSONException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } 
}
private静态字符串urlInst=”https://api.instagram.com/v1/media/popular?client_id=“+客户ID;
公共静态void Func(){
JSONParser jParser=新的JSONParser();
JSONObject json=jParser.getJSONFromUrl(urlInst);
试一试{
JSONArray pics=json.getJSONArray(“数据”);
对于(inti=0;i
但我得到了一个错误:

缓冲区错误:转换结果java.lang.NullPointerException时出错

JSON解析器解析数据org.JSON.JSONEXception时出错:输入结束于的字符0处

我想找出是什么导致了这个错误,有什么想法吗?据我所知,这一行有错误

JSONObject json=jParser.getJSONFromUrl(urlInst)

但我是初学者,所以我不确定。我们将感谢您的帮助

完整错误日志:

09-08 16:49:22.343:E/缓冲区错误(9981):转换结果java.lang.NullPointerException时出错 09-08 16:49:22.343:E/JSON解析器(9981):解析数据org.JSON.JSONException时出错:输入在的字符0处结束 09-08 16:49:22.351:E/AndroidRuntime(9981):致命异常:主 09-08 16:49:22.351:E/AndroidRuntime(9981):java.lang.RuntimeException:无法启动活动组件信息{hr.zadatak.undabot.instag/hr.zadatak.undabot.instag.StartShowing}:java.lang.NullPointerException 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)上 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.app.ActivityThread.access$2300(ActivityThread.java:125) 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.os.Handler.dispatchMessage(Handler.java:99)上 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.os.Looper.loop(Looper.java:123)上 09-08 16:49:22.351:E/AndroidRuntime(9981):位于android.app.ActivityThread.main(ActivityThread.java:4668) 09-08 16:49:22.351:E/AndroidRuntime(9981):位于java.lang.reflect.Method.Invokenactive(本机方法) 09-08 16:49:22.351:E/AndroidRuntime(9981):位于java.lang.reflect.Method.invoke(Method.java:521) 09-08 16:49:22.351:E/AndroidRuntime(9981):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 09-08 16:49:22.351:E/AndroidRuntime(9981):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 9-08 16:49:22.351:E/AndroidRuntime(9981):在dalvik.system.NativeStart.main(本机方法) 09-08 16:49:22.351:E/AndroidRuntime(9981):由以下原因引起:java.lang.NullPointerException 09-08 16:49:22.351:E/AndroidRuntime(9981):在hr.zadatak.undabot.instag.ListOfPhotos.loadInstagrampitures(ListOfPhotos.java:51) 09-08 16:49:22.351:E/AndroidRuntime(9981):在hr.zadatak.undabot.instag.StartShowing.onCreate(StartShowing.java:16) 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)上 09-08 16:49:22.351:E/AndroidRuntime(9981):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-08 16:49:22.351:E/AndroidRuntime(9981):。。。还有11个


错误日志清楚地显示了发生的情况

Buffer Error: Error converting result java.lang.NullPointerException
这意味着
try
块中的某些内容是
null

    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(); 
我猜
InputStream

is = httpEntity.getContent();          

首先尝试更改此代码:

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 {
    BufferedReader r = new BufferedReader(new InputStreamReader(is));
    String x = "";
    x = r.readLine();
    String total = "";

    while(x!= null){
    total += x;
    x = r.readLine();
    }

    json = total;
    is.close();
} catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

请添加日志中的完整错误。

我认为reader.readline()返回null,因此没有填充“sb”。然后字符串“json”为null,“jObj”也为null,问题就出现了。 请验证reader.readline()返回的内容不同于null

这发生在我编写提要阅读器的时候(不知道为什么),但通过另一种方式,它可以工作,所以您可能想尝试一下:

而不是:

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();
     ...
试着这样做:

try {
     BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
     StringBuilder sb = new StringBuilder();
     String line = null;
     do {
        line = reader.readLine();
        if( line != null)
            sb.append(line + "\n");
     }while (line != null)
     is.close();
     json = sb.toString();
     ...

为什么您认为按照您的建议更改代码会有所不同?因为这样我们就知道哪里会有问题。我应该问一下如何解决。现在我从页面上复制了代码,一切正常-我没有这个错误。我将在下面附上代码。我添加了完整的错误日志和@daro2189。您觉得一切如何?我每次都会遇到同样的错误?我该如何修复?你有什么想法吗?
try {
     BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
     StringBuilder sb = new StringBuilder();
     String line = null;
     do {
        line = reader.readLine();
        if( line != null)
            sb.append(line + "\n");
     }while (line != null)
     is.close();
     json = sb.toString();
     ...