1

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 を構築する方法などはありますか?

4

1 に答える 1

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);  
      }
}

この AsyncTask を Ui スレッドから次のように開始します。

new getDatafromserver().execute("");
于 2012-12-14T21:19:36.703 に答える