【问题标题】:Android Thread and ArrayAdapterAndroid 线程和 ArrayAdapter
【发布时间】:2012-12-14 21:13:50
【问题描述】:

我从 Google App Engine 以字符串形式获取数据,因此我必须在线程中进行。接下来我想在 ListView 中显示它,我正在尝试执行类似以下代码的操作:

public void ShowContacts (){    
    new Thread(new Runnable() {         
        @Override
        public void run() {
            try
            {
                final RestClient client = new RestClient("http://xxx.appspot.com/client");
                client.AddParam("userName", "user");
                client.Execute(RequestMethod.GET);
                _listView.post(new Runnable() {                 
                    @Override
                    public void run() {
                        String s = client.getResponse();
                        String[] items = s.split(";");

                        //adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, items);                         
                        //_listView.setAdapter(adapter);                            
                    }
                });                             
            }
            catch (Exception e)
            {

            }
        }
    }).start();
}     

此代码不适用于我。有没有办法从线程中获取一些值并将其设置为全局变量或直接在线程中构造一个 ArrayAdapter 或其他什么?

【问题讨论】:

  • This code is not working for me. 不工作怎么办?如果您能更具体地了解您所面临的问题,将会有所帮助。
  • 当我尝试构建适配器时出现此错误:“构造函数 ArrayAdapter(new Runnable(){}, int, int, String[]) 未定义”
  • 在您的适配器构造函数 args 中将 this 更改为 NameOfYourActivity.this 但用您的 Activity 类的真实名称填充它。此外,我建议您在深入研究 Android 之前花点时间复习一下 Java =)

标签: android multithreading google-app-engine listview runnable


【解决方案1】:

使用AsyncTask 从服务器获取数据并添加到 ListView 为:

public class getDatafromserver extends AsyncTask<String, Void, String> {

          @Override

      protected void onPreExecute() {
      }

      @Override
      protected String doInBackground(String... params) {

         final RestClient client = new 
                             RestClient("http://xxx.appspot.com/client");
            client.AddParam("userName", "user");
            client.Execute(RequestMethod.GET);
          String s = client.getResponse();
          return s  ;
      }      

      @Override
      protected void onPostExecute(String result) {                           
                    String[] items = result.split(";");

                    adapter = new ArrayAdapter<String>(this, 
                android.R.layout.simple_list_item_1, android.R.id.text1, items);                         
                    _listView.setAdapter(adapter);  
      }
}

从你的 Ui 线程启动这个 AsyncTask:

new getDatafromserver().execute("");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2012-04-20
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多