2012-10-06 44 views
1

我一直在创建一个应用程序,建立在目标sdk版本15上,并且最低sdk版本为8.当我在运行版本8的设备上运行它时,每件事情都运行得很完美。但是当我尝试使用高于版本10的任何东西,它会崩溃,并出现NullPointerException异常。应用程序在较高版本的Android上崩溃

的logcat的给了我这样的:

10-06 19:23:12.927: E/AndroidRuntime(589): FATAL EXCEPTION: main 
10-06 19:23:12.927: E/AndroidRuntime(589): java.lang.RuntimeException: Unable to start     activity  ComponentInfo{com.fansheroid.facts.chicks/com.fansheroid.facts.chicks.MainActivity}: java.lang.NullPointerException 
10-06 19:23:12.927: E/AndroidRuntime(589): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.os.Looper.loop(Looper.java:137) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.app.ActivityThread.main(ActivityThread.java:4340) 
10-06 19:23:12.927: E/AndroidRuntime(589): at java.lang.reflect.Method.invokeNative(Native Method) 
10-06 19:23:12.927: E/AndroidRuntime(589): at java.lang.reflect.Method.invoke(Method.java:511) 
10-06 19:23:12.927: E/AndroidRuntime(589): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
10-06 19:23:12.927: E/AndroidRuntime(589): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
10-06 19:23:12.927: E/AndroidRuntime(589): at dalvik.system.NativeStart.main(Native Method) 
10-06 19:23:12.927: E/AndroidRuntime(589): Caused by: java.lang.NullPointerException 
10-06 19:23:12.927: E/AndroidRuntime(589): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 
10-06 19:23:12.927: E/AndroidRuntime(589): at org.json.JSONTokener.nextValue(JSONTokener.java:94) 
10-06 19:23:12.927: E/AndroidRuntime(589): at org.json.JSONObject.<init>(JSONObject.java:154) 
10-06 19:23:12.927: E/AndroidRuntime(589): at org.json.JSONObject.<init>(JSONObject.java:171) 
10-06 19:23:12.927: E/AndroidRuntime(589): at com.fansheroid.facts.chicks.MainActivity.getTumblrs(MainActivity.java:156) 
10-06 19:23:12.927: E/AndroidRuntime(589): at com.fansheroid.facts.chicks.MainActivity.onCreate(MainActivity.java:62) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.app.Activity.performCreate(Activity.java:4465) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
10-06 19:23:12.927: E/AndroidRuntime(589): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
10-06 19:23:12.927: E/AndroidRuntime(589): ... 11 more 

我一直在试图找出问题在过去两天,但它只是不给我任何意义。

编辑添加的代码

public ArrayList<Tumblr> getTumblrs() throws ClientProtocolException, 
     IOException, JSONException { 
    String searchUrl = "http://api.tumblr.com/v2/blog/factsandchicks.com/posts?api_key=API_KEY"; 

    ArrayList<Tumblr> tumblrs = new ArrayList<Tumblr>(); 

    HttpClient client = new DefaultHttpClient(); 
    HttpGet get = new HttpGet(searchUrl); 

    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 

    String responseBody = null; 
    try { 
     responseBody = client.execute(get, responseHandler); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    JSONObject jsonObject = new JSONObject(responseBody); 

    JSONArray posts = jsonObject.getJSONObject("response").getJSONArray(
      "posts"); 
    for (int i = 0; i < posts.length(); i++) { 
     JSONArray photos = posts.getJSONObject(i).getJSONArray("photos"); 
     for (int j = 0; j < photos.length(); j++) { 
      JSONObject photo = photos.getJSONObject(j); 
      String url = photo.getJSONArray("alt_sizes").getJSONObject(0) 
        .getString("url"); 

      Tumblr tumblr = new Tumblr(url); 
      tumblrs.add(tumblr); 
     } 
    } 
    return tumblrs; 
} 

行156:

JSONObject jsonObject = new JSONObject(responseBody); 
+0

请显示MainActivity.java的第156行,以及周围的方法以及与此相关的任何方法。 (请注明156。) – Eric

+0

可能有一些关于'ResponseHandler'类不适用于较新的API的问题。尝试使用'HttpResponse'和'HttpEntity'类来获取主体。 – tolgap

+0

它已经在问题中了。 – Fansher

回答

0

通过使用HttpResponse和HttpEntity而不是ResponseHandler解决了问题,并解决了问题。

3

啊,看看这个:

E/AndroidRuntime(589): Caused by: java.lang.NullPointerException 10-06 19:23:12.927: 
E/AndroidRuntime(589): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 10-06 19:23:12.927: 
E/AndroidRuntime(589): at org.json.JSONTokener.nextValue(JSONTokener.java:94) 10-06 19:23:12.927: 
E/AndroidRuntime(589): at org.json.JSONObject.(JSONObject.java:154) 10-06 19:23:12.927: 
E/AndroidRuntime(589): at org.json.JSONObject.(JSONObject.java:171) 10-06 19:23:12.927: 
E/AndroidRuntime(589): at com.fansheroid.facts.chicks.MainActivity.getTumblrs(MainActivity.java:156) 10-06 19:23:12.927: 
E/AndroidRuntime(589): at com.fansheroid.facts.chicks.MainActivity.onCreate(MainActivity.java:62) 

它基本上说,JSON解析器失败:你可能会传递MainActivity.java的第156行为NULL。您应该检查该行的值,并查看您的设备升级是否未以某种方式清除某个值或未能正确检索值。

+0

谢谢,但我仍然无法找到问题。我已经添加了一些代码,你可以尝试进一步帮助吗? – Fansher

+0

他告诉你检查第156行。确保在代码中标记哪一行是156. – davidcesarino

+0

我的问题的最后一行清楚地说明了哪一行是156行。 – Fansher

1
try { 
    responseBody = client.execute(get, responseHandler); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

该段代码是您的响应失败的地方。您为响应人员分配空值,可能是您的呼叫存在失败情况,因此响应者在到达行156时仍然为空。

尝试查看您的调试输出中的ex.printStackTrace();输出看看发生了什么。

+0

我怎么能解决这个问题呢? – Fansher

+0

那么这行是你的问题:responseBody = client.execute(get,responseHandler);找出client.execute为什么不将数据放入responseBody。也许responseHandler格式不正确。 – Sorean