o19830015 2013-07-30 03:27 采纳率: 12.5%
浏览 2692
已采纳

AsyncTask结果处理

使用AsyncTask结果生成listView,代码:

    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 出现空值,为什么?请各位帮忙看一下谢谢

  • 写回答

2条回答

  • Kakalapa1986 2013-07-30 05:59
    关注

    在doInBackground中重新声明listContents。这是一个局部变量,优先级高于类成员。

    // 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"));
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站