我已经建立了2个项目,我的主要项目和推特发布项目。我已经将twitter一个导入主要部分,现在正试图将其连接起来。以下是导入代码。问题是我知道我错过了可能与上下文有关的事情?我刚刚总结了下面主要项目中包含的内容,以便您更好地理解(希望如此)。
import com.tweet.t.TweetToTwitterActivity;
TweetToTwitterActivity twitter = new TweetToTwitterActivity();
twitter.buttonLogin(v);
这是TweetToTwitterActivity
public class TweetToTwitterActivity extends Activity {
private SharedPreferences mPrefs;
/** Twitter4j object */
private Twitter mTwitter;
private RequestToken mReqToken;
public void buttonLogin(View v) {
mPrefs = 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();
}
}
Logcat产生此错误
09-23 11:27:40.034: ERROR/AndroidRuntime(229): java.lang.NullPointerException
09-23 11:27:40.034: ERROR/AndroidRuntime(229): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
09-23 11:27:40.034: ERROR/AndroidRuntime(229): at com.tweet.t.TweetToTwitterActivity.buttonLogin(TweetToTwitterActivity.java:74)
并指向此行。
mPrefs = getSharedPreferences("twitterPrefs", MODE_PRIVATE);
答案 0 :(得分:3)
getSharedPreferences()是Context类的一种方法。您只是创建一个扩展Activity的TweetToTwitterActivity实例,但此活动目前尚未启动。 解决此问题的一种方法是将Context对象也传递给buttonLogin:
更改public void buttonLogin(View v)
到public void buttonLogin(View v, Context context)
和mPrefs = getSharedPreferences("twitterPrefs", MODE_PRIVATE);
到mPrefs = context.getSharedPreferences("twitterPrefs", MODE_PRIVATE);
和twitter.buttonLogin(v);
到twitter.buttonLogin(v, this);
答案 1 :(得分:2)
Hemant是对的。
mPrefs = getSharedPreferences("twitterPrefs", MODE_PRIVATE);
为此,您需要TweetToTwitterActivity Activity而不仅仅是一个实例。因此,当您使用new关键字时,永远不会创建活动。只有操作系统可以为你创建一个活动。所以
twitter.buttonLogin(v, YourCurrentActvity.this);
和
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();
}
}
答案 2 :(得分:0)
尝试像这样传递 twitter.buttonLogin(V,Activityname.this)
然后在这个叫做函数的改变
public void buttonLogin(View v,Context this)
{ this.getSharedPreferences(“twitterPrefs”,MODE_PRIVATE);
}