2011-03-08 86 views
0

我一直在潛伏這個網站相當長一段時間,幸運的是直到現在我的所有問題都已經得到解答。我希望你們中的一些人能夠在這裏闡明我的問題。我可以成功獲取ListView以顯示字符串數組 - 但是當我嘗試將JSON數據分析到數組中時 - 我的程序只是強制關閉,而LogCat對我沒有多大幫助。任何人 - 這裏是我正在使用的代碼。解析JSON數據到Android ListView

String[] journals = {"Filler"}; 
String result; 
JSONArray jArray[]; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    try{ 
    //http post 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://xxx.xxx.xxx.xxx/query.php"); 
      org.apache.http.HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      InputStream is = entity.getContent(); 


    //convert response to string 
      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(); 

      result=sb.toString(); 

    //I think the problem is somewhere here .... 
      JSONArray jArray = new JSONArray(result); 
      for(int i=0;i<jArray.length();i++){ 
        JSONObject json_data = jArray.getJSONObject(i); 
        journals[i] = json_data.getString("JournalName"); 
        Log.i("log_tag","JournalID: "+json_data.getInt("JournalID") + 
          ",JournalName: " + json_data.getString("JournalName")); 
      } 
    } 
    catch (Exception e) { 
    } 

    //Or here -- I know this code should REALLY be separated and not in onCreate -- I feel like that's half my problem 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, journals)); 
    ListView lv = getListView(); 

在此先感謝你們!我很感激。

03-07 22:24:33.060: ERROR/AndroidRuntime(7986): FATAL EXCEPTION: main 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.SurvAcademia}: java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}: java.lang.NullPointerException 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.os.Looper.loop(Looper.java:123) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at dalvik.system.NativeStart.main(Native Method) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}: java.lang.NullPointerException 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.widget.TabHost.setCurrentTab(TabHost.java:326) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.widget.TabHost.addTab(TabHost.java:216) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at Andrew.Badura.A4A.com.SurvAcademia.onCreate(SurvAcademia.java:25) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  ... 11 more 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): Caused by: java.lang.NullPointerException 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at java.util.Arrays$ArrayList.<init>(Arrays.java:49) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at java.util.Arrays.asList(Arrays.java:171) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:125) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at Andrew.Badura.A4A.com.JournalActivity.onCreate(JournalActivity.java:69) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
+0

即使logcat輸出沒有幫助,你仍然應該在這裏發佈例外.. – 2011-03-08 03:41:09

+0

其實 - 我撒謊 - 基本上所有會發生的是ListView將顯示「填充」。在現實中,我只是希望那樣做就像一個佔位者。當我在數組中沒有任何內容初始化字符串日誌時,我得到LogCat錯誤。我會編輯它們 - 我相當確定它談論了一個NullPointerException – Badura 2011-03-08 03:50:24

回答

1

這段代碼在如此多的層次上是錯誤的,從無視Java約定開始並完全吞噬異常處理。

我強烈建議在應用程序的主線程中執行任何類型的遠程調用。您需要至少將其包裝到AsyncTask(或可能的服務)並使用回調填充ListView,以確保您回到主UI線程