2012-12-11 1 views
0

SearchURL 변수에 지정된 검색어에 따라 임의의 트윗을 얻으려고합니다. 그러나 메서드를 실행하면 결과가 반환되지 않습니다. 이 오류는 다음 줄에 발생합니다.Null 포인터 트위터에서 검색 결과를 얻는 중 예외가 발생했습니다.

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; 
} 

또는 사람이 다른 방법을 제안 할 수 있다면이 지정된 검색하거나 같은 도움이 될 것 지정된 사용자에 따라 임의의 트윗을 얻기 위해 사용할 수 !

+1

LogCat 오류를 게시하십시오. – Sam

답변

1

당신은

HttpGet tweetGet = new HttpGet(); 

를 호출하고 당신은 tweetGet에 아무것도 넣지 마십시오. 너는 setURI 나 다른 어떤 것도 부르지 않는다. tweetClient는 HttpGet이 URL을 가질 것으로 기대하지만 null입니다. 따라서 널 포인터 예외. 귀하의 요청에

1

살펴 보자 :

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

이 요청 정확히 아무것도 지정하지 URL, 나다. URL을 지정해야합니다. 그렇지 않으면 작동하지 않습니다.