2013-05-27 50 views
-4

如何創建列表以稍後發送到doInBackground內的ArrayAdapter? 這裏是我到目前爲止的代碼:如何從gson創建列表併發送到列表視圖

public class AsyncTaskTestActivity extends Activity { 

private ListView listView1; 

/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    listView1 = (ListView) findViewById(R.id.listView1); 

} 

private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 

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

     String response = ""; 

     for (String url : urls) { 

      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 

      try { 
       HttpResponse execute = client.execute(httpGet); 
       InputStream content = execute.getEntity().getContent(); 

       // Modificado 

       Reader reader = new InputStreamReader(content); 

       Gson gson = new GsonBuilder().create(); 

       Result results = gson.fromJson(reader, Result.class); 

       for (Result result : results) { 
        System.out.println(results.fromUser.toString()); 
       } 

      } 

      catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return response; 
    } 

    protected void onPostExecute(String result) { 

     // listView1.setAdapter(result); 

    } 
} 

public void readWebpage(View view) { 
    DownloadWebPageTask task = new DownloadWebPageTask(); 
    task.execute(new String[] { "http://search.twitter.com/search.json?q=beatles" }); 

} 
} 

我試圖把一個數組,但沒有奏效。 Result.java

package com.example.asynctask.model; 

import com.google.gson.annotations.SerializedName; 

public class Result { 

@SerializedName("from_user_id_str") 
public String fromUserIdStr; 

@SerializedName("profile_image_url") 
public String profileImageUrl; 

@SerializedName("created_at") 
public String createdAt; 

@SerializedName("from_user") 
public String fromUser; 

@SerializedName("id_str") 
public String idStr; 

public Metadata metadata; 

@SerializedName("to_user_id") 
public String toUserId; 

public String text; 

public long id; 

@SerializedName("from_user_id") 
public String from_user_id; 

@SerializedName("iso_language_code") 
public String isoLanguageCode; 

@SerializedName("to_user_id_str") 
public String toUserIdStr; 

public String source; 

    @Override 
    public String toString() { 
    return fromUser + " - " + text; 
    } 
} 

如何解決任何想法? 謝謝

回答

2

http://search.twitter.com/search.json?q=beatles返回的JSON絕不會類似於您創建的Java類。

JSON確實包含一個results字段,它是一個對象數組,看起來像是你在做什麼。在最低限度,您需要額外的課程,如下所示:

class TwitterData { 
    List<Result> results; 
} 

將該答覆映射到。

TwitterData td = new Gson().fromJson(reader, TwitterData.class); 

GSON會忽略這些對象中的所有其他字段返回和反序列化數組你Result對象的List