2012-10-06 51 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