2012-12-14 104 views
1

我从Google App Engine获取数据作为字符串,因此我必须在一个线程中执行此操作。接下来,我想在ListView中显示它,并且试图执行类似下面的代码:Android线程和ArrayAdapter

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?

+1

'此代码是不是me.'工作是什么关于它不工作?如果你对你遇到的麻烦有一些更具体的了解,这将会有所帮助。 – FoamyGuy

+0

当我尝试构造适配器时,出现此错误:“构造函数ArrayAdapter (new Runnable(){},int,int,String [])未定义” –

+0

在您的Adapter构造函数args内部将'this' 'NameOfYourActivity.this',但用你的Activity类的真实名称填满它。另外,我建议在你深入研究Android之前花点时间去研究Java) – FoamyGuy

回答

1

使用AsyncTask从服务器获取数据,并添加到ListView控件为:从你的UI线程

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:

new getDatafromserver().execute("");