0

SearchURL 変数で指定された検索用語を指定して、ランダムなツイートを取得しようとしています。ただし、メソッドを実行しても結果が返されません。エラーが次の行で発生することはわかっています。

HttpResponse tweetResponse = tweetClient.execute(tweetGet);

しかし、何が問題なのかわかりません。情報の取得とデコードにおいて、すべてが正しく機能している必要があります。誰にもアイデアはありますか?それを挑戦と考えてください。

TextView caption;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pitter_home);

    // Create PitterImageFragment
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.main_image, new PitterImageFragment());
    transaction.commit();

    // Create Twitter Caption Reference
    caption = (TextView) findViewById(R.id.tweet_caption);

    // Create Creation Button
    Button button = (Button) findViewById(R.id.creation_button);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            FragmentManager manager = getFragmentManager();
            Fragment fragment = manager.findFragmentById(R.id.main_image);
            ((PitterImageFragment) fragment).generateImage();
            generateTweet();
        }// end onClick method
    });

}// end OnCreateMethod

public void generateTweet () {

    // Code Taken From: http://mobile.tutsplus.com/tutorials/android/build-a-twitter-search-app-project-setup/
    try {
        // Calculate what to Search for
        String searchURL = "http://search.twitter.com/search.json?q=jedi";
        new GetTweets().execute(searchURL);

    } catch(Exception e) {
        Log.d("CATCH", "Begin Code Error: something went wrong!");
        e.printStackTrace();
    }// end catch
}// end generateTweet method

protected void setCaption(String tweet) {
    caption.setText(tweet);
}// end setCaption method

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

    protected String doInBackground(String... twitterURL) {

        // Get Tweets from the Internet
        StringBuilder tweetFeedBuilder = new StringBuilder();

        try {
            Log.d("LINE WATCH", "entering try statement");
            HttpClient tweetClient = new DefaultHttpClient();
            Log.d("LINE WATCH", "line 1 completed");
            HttpGet tweetGet = new HttpGet();
            Log.d("LINE WATCH", "line 2 completed");
            Log.d("LINE WATCH", tweetGet.toString());
            HttpResponse tweetResponse = tweetClient.execute(tweetGet);
            Log.d("LINE WATCH", "line 3 completed");
            StatusLine searchStatus = tweetResponse.getStatusLine();
            Log.d("LINE WATCH", "line 4 completed");

            if (searchStatus.getStatusCode() == 200) {
                HttpEntity tweetEntity = tweetResponse.getEntity();
                InputStream tweetContent = tweetEntity.getContent();
                InputStreamReader tweetInput = new InputStreamReader(tweetContent);
                BufferedReader tweetReader = new BufferedReader(tweetInput);
                String lineIn;
                while ((lineIn = tweetReader.readLine()) != null) {
                    tweetFeedBuilder.append(lineIn);
                }// end while
            } else {
                Log.d("CATCH", "Get Status Code Error: something went wrong!");
            }// end if

        } catch(Exception e) {
            Log.d("CATCH", "Get Online Data Error: something went wrong!");
            e.printStackTrace();
        }// end catch
        return tweetFeedBuilder.toString();
    }// end doInBackground method

    protected void onPostExecute(String result) {
        // Decode the Results from the Search
        ArrayList<String> tweetList = new ArrayList<String>();
        try {
            JSONObject resultObject = new JSONObject(result.toString());
            JSONArray tweetArray = resultObject.getJSONArray("results");
            // Walk Through the Returned Tweets
            for (int t=0; t<tweetArray.length(); t++) {
                JSONObject tweetObject = tweetArray.getJSONObject(t);
                tweetList.add(tweetObject.get("text")+"\n\n");
            }// end for
        } catch (Exception e) {
            Log.d("CATCH", "Decode Results Error: something went wrong!");
            e.printStackTrace();
        }// end catch

        //TODO: TweetList size is always zero!?! WHY?
        // Select a Random Tweet from the Returned Ones
        Log.d("TWEETLIST", "TweetList size = " + tweetList.size());
        if (tweetList.size() > 0 ) {
            Random random = new Random();
            int number = random.nextInt(tweetList.size());
            setCaption(tweetList.get(number));
        } else {
            setCaption("No Tweets Found!");
        }// end if

    }// end onPostExecute method

}// end GetTweets class

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_pitter_home, menu);
    return true;
}

または、指定された検索または指定されたユーザーに基づいてランダムなツイートを取得するために使用できる別の方法を誰かが提案できる場合は、同じように役立ちます!

4

2 に答える 2

1

あなたが呼ぶ

HttpGet tweetGet = new HttpGet();

そして、tweetGet には何も入れません。setURI などを呼び出さないでください。tweetClient は HttpGet に URL があると想定していますが、null です。したがって、ヌルポインタ例外です。

于 2012-12-11T20:27:21.293 に答える
1

あなたのリクエストを見てみましょう:

HttpClient tweetClient = new DefaultHttpClient();
HttpGet tweetGet = new HttpGet();
HttpResponse tweetResponse = tweetClient.execute(tweetGet);

これはまったく何も要求せず、URL が指定されていません。URL を指定する必要があります。指定しないと機能しません。

于 2012-12-11T20:27:42.593 に答える