2013-07-29 134 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