使用Asynctask从twitter检索公共推文

时间:2017-04-15 16:16:42

标签: android

您好我试图从Twitter检索公开推文,但似乎没有任何解释。我有以下代码,但它不起作用。如果这是一个过时的代码,如果你有任何我可以看到的示例,我们将不胜感激。

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

    new MyTask().execute();

}

private class MyTask extends AsyncTask<Void, Void, Void> {
    private ProgressDialog progressDialog;

    protected void onPreExecute() {
        progressDialog = ProgressDialog.show(MainActivity.this,
                "", "Loading. Please wait...", true);
    }

    @Override
    protected Void doInBackground(Void... arg0) {
        try {

            HttpClient hc = new DefaultHttpClient();
            HttpGet get = new
                    HttpGet("http://search.twitter.com/search.json?q=android");

            HttpResponse rp = hc.execute(get);

            if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
            {
                String result = EntityUtils.toString(rp.getEntity());
                JSONObject root = new JSONObject(result);
                JSONArray sessions = root.getJSONArray("results");
                for (int i = 0; i < sessions.length(); i++) {
                    JSONObject session = sessions.getJSONObject(i);

                    Tweet tweet = new Tweet();
                    tweet.content = session.getString("text");
                    tweet.author = session.getString("from_user");
                    tweets.add(tweet);
                }
            }
        } catch (Exception e) {
            Log.e("TwitterFeedActivity", "Error loading JSON", e);
        }
        return null;

    }
    @Override
    protected void onPostExecute(Void result) {
        progressDialog.dismiss();
        setListAdapter(new TweetListAdaptor(
                MainActivity.this, R.layout.list_item, tweets));
    }

}

private class TweetListAdaptor extends ArrayAdapter<Tweet> {

    private ArrayList<Tweet> tweets;

    public TweetListAdaptor(Context context,

                            int textViewResourceId,
                            ArrayList<Tweet> items) {
        super(context, textViewResourceId, items);
        this.tweets = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.list_item, null);
        }
        Tweet o = tweets.get(position);

        TextView tt = (TextView) v.findViewById(R.id.toptext);
        TextView bt = (TextView) v.findViewById(R.id.bottomtext);
        tt.setText(o.content);
        bt.setText(o.author);

        return v;
    }
}

}

1 个答案:

答案 0 :(得分:0)

如果您在网络浏览器中访问http://search.twitter.com/search.json?q=android,您会看到:

{"errors":[{"message":"The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.","code":64}]}
  

不知道这是否是过时的代码

是的,正如上面的错误消息所示。

您可以阅读the Twitter REST API documentation,例如the documentation on their search API