【问题标题】:How to access getSharedPreferences from another class?如何从另一个类访问 getSharedPreferences?
【发布时间】:2011-09-23 11:47:28
【问题描述】:

我已经构建了 2 个项目,我的主要项目和一个在 Twitter 上发布的项目。我已经将 twitter 导入到 main 中,现在正在尝试将其连接起来。下面是导入代码。问题是我知道我错过了可能与上下文有关的东西?我刚刚总结了下面我的主要项目中包含的内容,以便您更好地理解(希望如此)。

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

【问题讨论】:

  • 你的 onCreate() 方法在哪里.. 发布这个活动的完整代码,以便我们了解..

标签: java android


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    赫曼特是对的。

    mPrefs = getSharedPreferences("twitterPrefs", MODE_PRIVATE);
    

    为此,您需要 TweetToTwitterActivity Activity 而不仅仅是一个实例。因此,当您使用 new 关键字时,永远不会创建 Activity。只有操作系统可以为你创建一个活动。所以

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

    【讨论】:

      【解决方案3】:

      尝试像这样通过 twitter.buttonLogin(v,Activityname.this)

      然后在被调用的函数中像这样改变

      public void buttonLogin(View v,Context this)

      { this.getSharedPreferences("twitterPrefs", MODE_PRIVATE);

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 2012-01-04
        • 2012-05-06
        • 1970-01-01
        • 2015-10-20
        • 2016-11-15
        相关资源
        最近更新 更多