我有一个自己运行良好的推特包。现在,当我导入它并尝试在我的主应用程序中使用它时,我遇到了nullpointerexceptions的问题。第一个我解决了,但立即遇到了另一个。我现在相信这是因为我正在错误地处理上下文。
以下是我从包含的包中调用一个方法的方法。
TweetToTwitterActivity twitter = new TweetToTwitterActivity();
twitter.buttonLogin(v, context);
现在在TweetToTwitterActivity文件中,我有这个。第一种方法运行正常,但我现在从这一行得到一个空指针异常。我想我完全是错误的做法。任何人都可以帮我理解如何从导入的类中正确运行方法吗?
的setContentView(twitterSite);
public void buttonLogin(View v, Context context) {
mPrefs = context.getSharedPreferences("twitterPrefs", MODE_PRIVATE);
// Load the twitter4j helper
mTwitter = new TwitterFactory().getInstance();
// Tell twitter4j that we want to use it with our app
mTwitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
if (mPrefs.contains(PREF_ACCESS_TOKEN)) {
Log.i(TAG, "Repeat User");
loginAuthorisedUser();
} else {
Log.i(TAG, "New User");
loginNewUser(context);
}
}
private void loginNewUser(Context context) {
try {
Log.i(TAG, "Request App Authentication");
mReqToken = mTwitter.getOAuthRequestToken(CALLBACK_URL);
Log.i(TAG, "Starting Webview to login to twitter");
WebView twitterSite = new WebView(context);
twitterSite.requestFocus(View.FOCUS_DOWN);
twitterSite.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
twitterSite.loadUrl(mReqToken.getAuthenticationURL());
setContentView(twitterSite);
} catch (TwitterException e) {
Log.e("HelloWorld", "Error in activity", e);
Toast.makeText(this, "Twitter Login error, try again later", Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:0)
要显示网络视图, 确保TweetToTwitterActivity twitter是一个启动和活动的活动,否则它不能setContentView,因为它不受控制。这可以通过......等来完成。
TweetToTwitterActivity twitter = new TweetToTwitterActivity();
Intent intent = new Intent();
intent.setClass(context, TweetToTwitterActivity .class);
startActivity(intent);
然后,最好(可能需要)从twitter活动onCreate方法调用您的方法,而不是从创建活动的位置调用。
如评论所述,如果您不想实际显示网页视图,只是调用网页并分析结果,请不要使用网页视图,而是使用HttpPost(或者可能是HttpGet,具体取决于你正在做什么。)这是一个来自我有一个网络帖子的应用程序的例子,并查看结果而不是显示结果....
public static void checkWebSite() {
HttpClient httpclient = getClient();
HttpPost httppost = new HttpPost("http://yoursite.com/pathtopage");
try {
//If you need to add name value params you can do that here...
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("name", "value"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
String html = InputStreamToString(response.getEntity().getContent()).toString();
//You can now analyze the html string for whatever you are looking for
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}