2011-09-23 172 views
1

我已經建立了2個項目我的主要一個和一個推特發佈一個。我已經把twitter的一個導入到了主目錄中,並且現在正在嘗試將它掛鉤。以下是導入代碼。問題是我知道我錯過了可能與上下文有關的事情?我剛纔總結了我的主要項目中包含的內容,以便您更好地理解(希望)。如何從另一個類訪問getSharedPreferences?

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

其中是你的onCreate()方法..發佈完整代碼的這種活力,以便我們得到一些想法.. – ngesh

回答

3

getSharedPreferences()是Context類的方法。您只是創建了一個TweetToTwitterActivity的實例,該實例擴展了Activity,但此活動目前尚未啓動。 一個解決這個辦法,是還傳遞一個上下文對象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

Hemant是對的。

mPrefs = getSharedPreferences("twitterPrefs", MODE_PRIVATE); 

爲此,您需要TweetToTwitterActivity活動而不僅僅是一個實例。因此,當您使用新的關鍵字時,活動永遠不會被創建。只有OS可以爲ya創建一個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(); 
    } 
} 
0

試圖通過這樣的 twitter.buttonLogin(V,Activityname.this)

然後調用的函數變化這樣

公共無效buttonLogin (View v,Context this)

{ this.getSharedPreferences(「twitterPrefs」,MODE_PRIVATE);

}