2013-07-29 190 views
0

我必須使用AsyncTask來填充列表視圖的結果。 這裏是我的代碼:AsyncTask結果處理

public class MyActivity extends Activity { 
     MainActivity ob; 
     String url_connectX = "http://hosr.com/test/getjson.php"; 
     Httppostaux post; 
     JSONArray lststat; 

     public JSONArray liststatus() { 
      JSONArray jdata=post.getserverdataX(url_connectX); 
      return jdata; 
     } 

     @Override 
     protected void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.my_new_screen); 
      post = new Httppostaux(); 
      new asyncpost().execute(); 
     } 

//************************************************************************************ 
     class asyncpost extends AsyncTask< String, String, String > { 
      List<String> listContents;  

      protected void onPostExecute(String result) { 
       pDialog.dismiss(); 
       if (result.equals("ok")){ 
        ListView myListView = (ListView) findViewById(R.id.ListView1); 
        Log.e("JSON log", "This is my problem = "+listContents);   
        myListView.setAdapter(new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_list_item_1, listContents)); 
       }else{ 
        Log.e("JSON log", "ListContents has problems."+listContents);    
        err_getlista(); 
       } 
      } 
      protected String doInBackground(String... params) { 
       lststat = liststatus(); 
       if (lststat != null){      
        if (lststat != null && lststat.length() > 0){ 
         JSONObject json_data; 
         try { 
          int length = lststat.length(); 
          List<String> listContents = new ArrayList<String>(length); 
          for (int i = 0; i < length; i++) 
          { 
           json_data = lststat.getJSONObject(i); 
           listContents.add(json_data.getString("client_name")); 
          } 
         } catch (Exception e) { 
           Log.e(null, e.toString()); 
         }     
        }    
        return "ok"; 
       }else{   
        return "err";      
       } 
      } 
      public void err_getlista(){ 
       Toast toast1 = Toast.makeText(getApplicationContext(),"Error", Toast.LENGTH_SHORT); 
       toast1.show();  
      } 
     } 
//************************************************************************************ 
    } 

listContents結束NULL。爲什麼?看來,在postExecute的某處,listContent的值變爲NULL,即使在doInBackGround中似乎有一個非NULL值。我不明白這個 我怎麼修復它?

回答

1

您redeclare list內容doInBackground。它是一個局部變量,它優先於類成員。此外,你可能想確保你有一些邊界檢查周圍清單是零大小

// should be ... 
    // listContents = new ArrayList<String>(length); 
    List<String> listContents = new ArrayList<String>(length); 
    for (int i = 0; i < length; i++) 
    { 
     json_data = lststat.getJSONObject(i); 
     listContents.add(json_data.getString("client_name")); 
    } 
+0

我會從來沒有見過這個......非常感謝。它解決了我的問題。 – user1137313