2011-09-23 5 views
1

나는 메인 프로젝트와 지저귐 프로젝트 중 하나를 게시하는 2 개의 프로젝트를 빌드했다. 나는 트위터 1을 메인으로 가져 왔고 지금 그것을 연결하려고 노력 중이다. 다음은 가져 오기 코드입니다. 문제는 컨텍스트와 관련이있는 것을 놓친다는 것입니다. 나는 아래의 주요 프로젝트에 포함 된 내용을 요약하여 잘 이해하고 있습니다 (희망 사항).다른 클래스에서 getSharedPreferences에 액세스하는 방법은 무엇입니까?

import com.tweet.t.TweetToTwitterActivity; 

      TweetToTwitterActivity twitter = new TweetToTwitterActivity(); 
      twitter.buttonLogin(v); 

여기에 TweetToTwitterActivity에게 인 로그 캣이 줄이 오류

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) 

및 포인트를 생성

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

.

mPrefs = getSharedPreferences("twitterPrefs", MODE_PRIVATE); 
+0

이 acrtivity의 당신의에서 onCreate() 메소드 .. 포스트 전체 코드입니다

} .. – ngesh

답변

3

getSharedPreferences()는 Context 클래스의 메서드입니다. Activity를 확장하는 TweetToTwitterActivity의 인스턴스를 만들고 있지만이 활동은 현재 시작되지 않았습니다. 이 문제를 해결하기 위해 한 가지 방법은 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);

to twitter.buttonLogin(v, this);

2

헤머가 맞습니다.

mPrefs = getSharedPreferences("twitterPrefs", MODE_PRIVATE); 

이렇게하려면 TweetToTwitterActivity 활동이 필요하며 인스턴스가 필요하지 않습니다. 따라서 새로운 키워드를 사용하면 활동이 만들어지지 않습니다. 운영 체제에서만 나중에 활동을 생성 할 수 있습니다. 그래서

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

시도는이

공공 무효 buttonLogin처럼 호출 된 함수의 변화를 다음이 twitter.buttonLogin (V, Activityname.this)

처럼 통과 (보기 v, 컨텍스트 this)

{ this.getSharedPreferences ("twitterPrefs", MODE_PRIVATE); 우리는 몇 가지 아이디어를 얻을 수 있도록

관련 문제