java - 我如何将 TwitterFeed (JSON) 解析为自定义 ListView ?

标签 java android json listview twitter

我从如何将 JSON 数据解析为自定义 ListView 的教程中获得了代码

这里是教程中的代码,做了一些修改:

public class TwitterParseHandler extends Activity {
ArrayList<TwitterFeed> arrayOfWebData = new ArrayList<TwitterFeed>();

class TwitterFeed {
    public String text;
    public String created_at;
}

FancyAdapter aa=null;

static ArrayList<String> resultRow;

public void onCreate(Bundle savedInstanceState) {
    try
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_twitter_parse_handler);
        String result = "";

        try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=3FMNu&count=20&exclude_replies=True");
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream webs = entity.getContent();

            try
            {
                BufferedReader reader = new BufferedReader(new InputStreamReader(webs, "iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "/n");
                }

                webs.close();
                result=sb.toString();
            }catch(Exception e){
                Log.e("log_tag", "Error in converting result "+e.toString());
            }
        }catch(Exception e){
            Log.e("log_tag", "Error in http connection "+e.toString());
        }

        try
        {
            JSONArray jArray = new JSONArray(result);
            for (int i=0;i<jArray.length();i++)
            {
                JSONObject json_data = jArray.getJSONObject(i);
                TwitterFeed resultRow = new TwitterFeed();
                resultRow.text = json_data.getString("text");
                resultRow.created_at = json_data.getString("created_at");

                arrayOfWebData.add(resultRow);
            }
        }catch(JSONException e){
            Log.e("log_tag", "Error in parsing data "+e.toString());
        }

        ListView myListView = (ListView)findViewById(R.id.list);

        aa=new FancyAdapter();

        myListView.setAdapter(aa);
    }
    catch(Exception e){
        Log.e("ERROR", "ERROR IN CODE: "+e.toString());
        e.printStackTrace();
    }
}

class FancyAdapter extends ArrayAdapter<TwitterFeed> {
    FancyAdapter() {
        super(TwitterParseHandler.this, android.R.layout.simple_list_item_1, arrayOfWebData);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView==null) {
            LayoutInflater inflater=getLayoutInflater();
            convertView=inflater.inflate(R.layout.twitterlist, null);

            holder=new ViewHolder(convertView);
            convertView.setTag(holder);
        }
        else
        {
            holder=(ViewHolder)convertView.getTag();
        }
        holder.populateFrom(arrayOfWebData.get(position));

        return(convertView);
    }
}

class ViewHolder {
    public TextView name=null;
    public TextView birthday=null;

    ViewHolder(View row) {
        name=(TextView)row.findViewById(R.id.TwitterText);
        birthday=(TextView)row.findViewById(R.id.TwitterDatum);
    }

    void populateFrom(TwitterFeed r) {
        name.setText(r.text);
        birthday.setText(r.created_at);
    }
}
}

我已经用我的推特源替换了教程中的 JSON(工作正常):https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=3FMNu&count=20&exclude_replies=True

并将属性从 namebirthday 更改为 textcreated_at,现在当我调试它时我得到以下错误:

08-04 12:36:40.539: E/log_tag(4599): Error in parsing data org.json.JSON
Exception: Value 
{ "error": "This method requires a GET.",
  "request":"\/1\/statuses\/user_timeline.json?include_entities=true&include_rts=true&screen_name=3FMNu&count=20&exclude_replies=True"
} of type org.json.JSONObject cannot be converted to JSONArray

为什么会发生这种情况,我该如何解决?

最佳答案

尝试:

HttpGet httpGet = new HttpGet(https://api.twitter.com/1/statuses/user_timeline.json);

带参数:

List<NameValuePair> params = new LinkedList<NameValuePair>();
params.add(new BasicNameValuePair("include_entities", true));
...

也试试 How to add parameters to a HTTP GET request in Android?

关于java - 我如何将 TwitterFeed (JSON) 解析为自定义 ListView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11808279/

相关文章:

java - 如何使用共享首选项将所有地址值存储在单个键中

java - ProcessBuilder 无法返回 JSon 字符串

android studio导入没有gradle的maven项目

python - 无法将从 MongoDB 检索到的 json 值返回到 python flask 中的 HTML 页面

c# - 使用 Newtonsoft JToken.ToObject<T> 反序列化NodaTime Instant

php - MySQL 仅当该记录的日期时间列数据发生更改时才更新该数据

java - 如何在不丢失时间部分的情况下在 Java 中将日期作为 SQL 参数传递?

java - Android:如何从 sqlite 数据库检索数据

java - SetText 从类到主 XML 文件

java - Spring MVC : Sharing context within ear