2014-12-02 3 views
1

Я не могу получить доступ к методу getPreferences интерфейса sharedPreferences в моем методе. Я использовал метод getpreferences в моем методе logintofacebook, но он дает мне ошибку для PRIVATE_MODE, как я могу решить эту проблему.Не удалось получить доступ к методу getPreferences

это мой отредактированный код.

public class FacebookUtils { 

private static final DialogListener DEFAULT_AUTH_ACTIVITY_CODE = null; 

private static String APP_ID = "783826255024540"; 
public Facebook facebook = new Facebook(APP_ID); 
private AsyncFacebookRunner mAsyncRunner; 
String FILENAME = "AndroidSSO_data"; 
private SharedPreferences mPrefs; 
Button btnFbLogin; 
Button btnFbGetProfile; 
Context mcontext; 

public FacebookUtils() { 
    // TODO Auto-generated constructor stub 

} 
public void authorize(Activity activity, String[] permissions, 
     final DialogListener listener) { 
    authorize(activity, permissions, DEFAULT_AUTH_ACTIVITY_CODE); 
} 
public FacebookUtils(Context context) { 

} 


@SuppressWarnings("unused") 
public void loginToFacebook() { 

    SharedPreferences sharedPreferences=mcontext.getSharedPreferences("", Context.MODE_PRIVATE); 
    String access_token = mPrefs.getString("access_token", null); 
    long expires = mPrefs.getLong("access_expires", 0); 

    if (access_token != null) { 
     facebook.setAccessToken(access_token); 
     btnFbLogin.setVisibility(View.INVISIBLE); 
     btnFbGetProfile.setVisibility(View.VISIBLE); 
     Log.d("FB Sessions", "" + facebook.isSessionValid()); 
    } 
    if (expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 
    if (!facebook.isSessionValid()) { 
     facebook.authorize((Activity) mcontext, 
       new String[] { "email", "publish_stream" }, 
       new DialogListener() { 
        @Override 
        public void onCancel() { 
        } 
        @Override 
        public void onComplete(Bundle values) { 

         SharedPreferences sharedPreferences=mcontext.getSharedPreferences("", Context.MODE_PRIVATE); 
         Editor editor=sharedPreferences.edit(); 
         editor.putString("access_token",facebook.getAccessToken()); 
         editor.putLong("access_expires",facebook.getAccessExpires()); 
         editor.commit(); 
         btnFbLogin.setVisibility(View.INVISIBLE); 
         btnFbGetProfile.setVisibility(View.VISIBLE); 
        } 
        @Override 
        public void onError(DialogError error) { 
         // Function to handle error 
        } 
        @Override 
        public void onFacebookError(FacebookError fberror) { 
        } 

       }); 
     } 


} 



public void getprofileinformation() 
{ 

    mAsyncRunner.request("me", new RequestListener() { 

     @Override 
     public void onMalformedURLException(MalformedURLException e, Object state) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onIOException(IOException e, Object state) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onFileNotFoundException(FileNotFoundException e, Object state) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onFacebookError(FacebookError e, Object state) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onComplete(String response, Object state) { 
      // TODO Auto-generated method stub 
      Log.d("Profile", response); 
      String json = response; 
      try { 
       JSONObject profile = new JSONObject(json); 
       final String name = profile.getString("name"); 
       final String email = profile.getString("email"); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(mcontext, "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show(); 
        } 
       }); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

} 
protected void runOnUiThread(Runnable runnable) { 
    // TODO Auto-generated method stub 
} 
} 

и это ошибка logcat.

12-02 13:31:36.648: E/AndroidRuntime(2524): FATAL EXCEPTION: main 
12-02 13:31:36.648: E/AndroidRuntime(2524): Process: com.facebook.androidhive, PID: 2524 
12-02 13:31:36.648: E/AndroidRuntime(2524): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at com.facebook.demo.FacebookUtils.loginToFacebook(FacebookUtils.java:56) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at com.facebook.demo.AndroidFacebookConnectActivity$1.onClick(AndroidFacebookConnectActivity.java:51) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at android.view.View.performClick(View.java:4756) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at android.view.View$PerformClick.run(View.java:19749) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at android.os.Handler.handleCallback(Handler.java:739) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at android.os.Handler.dispatchMessage(Handler.java:95) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at android.os.Looper.loop(Looper.java:135) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at java.lang.reflect.Method.invoke(Native Method) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at java.lang.reflect.Method.invoke(Method.java:372) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
12-02 13:31:36.648: E/AndroidRuntime(2524):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)` 

Это мой второй вид деятельности, в котором я назвал этот класс.

public class AndroidFacebookConnectActivity extends Activity { 
    private static String APP_ID = "783826255024540"; 
    private Facebook facebook = new Facebook(APP_ID); 
    private AsyncFacebookRunner mAsyncRunner; 
    String FILENAME = "AndroidSSO_data"; 
    private SharedPreferences mPrefs; 
    Button btnFbLogin; 
    Button btnFbGetProfile; 
    @SuppressWarnings("unused") 
    private FacebookUtils utils; 
    Context mContext; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     btnFbLogin = (Button) findViewById(R.id.btn_fblogin); 
     btnFbGetProfile = (Button) findViewById(R.id.btn_get_profile); 
     mAsyncRunner = new AsyncFacebookRunner(facebook); 
     utils = new FacebookUtils(); 
     btnFbLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d("Image Button", "button Clicked"); 
       utils.loginToFacebook(mContext); 
      } 
     }); 
     btnFbGetProfile.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       utils.getprofileinformation(); 
      } 
     }); 
    } 

ошибка связана с этой деятельностью? Я получаю null исключение в этой строке. String access_token = mPrefs.getString ("access_token", null);

+0

Вставить ошибку из logcat – BzH

+0

Я не запускал приложение, потому что получаю ошибку MODE_PRIVATE не может быть разрешен переменной ошибке. – user3354610

+0

Возможно, вам нужно вызвать mPrefs = getPreferences (MODE_PRIVATE); с context.getPreferences (MODE_PRIVATE); –

ответ

2

Это было бы легко для вас: -

Выставление значений

SharedPreferences sharedPreferences=mContext.getSharedPreferences("", Context.MODE_PRIVATE); 
Editor editor=sharedPreferences.edit(); 
editor.putString("access_token",facebook.getAccessToken()); 
editor.putLong("access_expires",facebook.getAccessExpires()); 
editor.commit(); 

Получение значения

SharedPreferences sharedPreferences=mContext.getSharedPreferences("", Context.MODE_PRIVATE); 
String access_token = sharedPreferences.getString("access_token", null); 
long expires = sharedPreferences.getLong("access_expires", 0); 

Проверьте конструктор один раз. Может быть mContext равно null. Попробуйте это: -

public FacebookUtils(Context context) { 
    mContext=context; 
} 

Попробуйте передать контекст loginToFacebook(): -

public void loginToFacebook(Context mContext) { 
} 
+0

Это дает мне метод создания ошибок getSharedPreferences в строке SharedPreferences sharedPreferences = getSharedPreferences ("", Context.MODE_PRIVATE); – user3354610

+0

Я отредактировал ответ. Используйте 'SharedPreferences sharedPreferences = mContext.getSharedPreferences (" ", Context.MODE_PRIVATE);' –

+0

все еще получает ошибку: 12-02 13: 18: 22.562: E/AndroidRuntime (2420): java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.content.SharedPreferences android.content.Context.getSharedPreferences (java.lang.String, int)' на ссылке нулевого объекта – user3354610

4

Вы не инициализируется переменная mPrefs. Отсюда ошибка, когда вы пытаетесь сделать mPrefs.getString("access_token", null);null;

В настоящее время вы только объявили его с утверждением,

private SharedPreferences mPrefs; 

но порядка доступа к ней, вы также должны инициализировать его, как,

mPrefs = getPreferences(MODE_PRIVATE); 

, прежде чем пытаться использовать Это.

0

только в случае, если кто-то сталкивается с этим вопрос:

public class listops { 
    Context mcontext; 
    SharedPreferences prefs; 


    public listops(Context context) 
    { 
    mcontext=context; 
    prefs= mcontext.getSharedPreferences("prefs", Context.MODE_PRIVATE); 

    } 
... 
} 

это будет решить эту проблему.

Смежные вопросы