Android 线程和 ArrayAdapter

标签 android multithreading google-app-engine listview runnable

我正在从 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 或其他方式?

最佳答案

使用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("");

关于Android 线程和 ArrayAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886325/

相关文章:

android - Google Places Api (.addConnectionCallbacks) 出错

google-app-engine - 如何将数据传递给 GAE 基本模板?

java - 使用 URLFetch 发送 channel 消息的服务时出现 SocketTimeoutException

mysql - Google App Engine 和 Cloud sql 连接被拒绝

android - 应用程序在没有网络连接的情况下意外关闭

android - 实时开发者通知不发送 IAP 订阅事件消息

android - 无法使用cmd构建android项目

c# - 与使用 Interlocked 类相比,使用 volatile 关键字有什么优势吗?

c# - 在构造函数中连接线程 C# 事件

java - 如何创建线程安全的 JSP 页面