Java 分析Android应用程序中的JSON数据时出错
在我的Android应用程序中,我试图从instagram获取流行媒体,我使用的是本教程中显示的JSONParser类 这是我正在努力工作的代码: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
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();
...