#android
#Android
Вопрос:
Я пытаюсь написать простое 2-экранное приложение, в котором на 1-м экране пользователь проходит аутентификацию на Facebook, а на 2-м экране на стене пользователя нажимается простая кнопка.
Я получаю исключение NullPointerException, когда нажимаю на кнопку PostonWall, и я считаю, что это связано с передачей информации о сеансе между действиями. Но я не могу понять, как восстановить информацию о сеансе.
Что я здесь делаю не так? Любое предложение высоко ценится!
Заранее спасибо.
Вот мой код для 1-го экрана.
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
private static final String FACEBOOK_APPID = "XXXXXX";
private static final String FACEBOOK_PERMISSION = "publish_stream";
public FacebookConnector facebookConnector;
private TextView FacebookStatus;
private Button FacebookButton, ButtonNextScreen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FacebookStatus=(TextView)findViewById(R.id.textView1);
FacebookButton=(Button)findViewById(R.id.button1);
ButtonNextScreen=(Button)findViewById(R.id.ButtonNextScreen);
this.facebookConnector = new FacebookConnector(FACEBOOK_APPID, this, getApplicationContext(), new String[] {FACEBOOK_PERMISSION});
FacebookButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {
@Override
public void onAuthSucceed() {
SessionStore.save(facebookConnector.getFacebook(), getApplicationContext());
FacebookStatus.setText("Facebook Authenticated!!");
}
@Override
public void onAuthFail(String error) {
}
};
SessionEvents.addAuthListener(listener);
facebookConnector.login();
}
});
ButtonNextScreen.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Intend to go second screen (SendScreen)
Intent i=new Intent(v.getContext(),SecondClass.class);
startActivity(i);
}
});
}
}
//////////////// Метод FacebookConnector,
public FacebookConnector(String appId,Activity activity,Context context,String[] permissions) {
this.facebook = new Facebook(appId);
SessionStore.restore(facebook, context);
SessionEvents.addAuthListener(mSessionListener);
SessionEvents.addLogoutListener(mSessionListener);
this.context=context;
this.permissions=permissions;
this.mHandler = new Handler();
this.activity=activity;
}
/////////////// Сохранение сеанса и методы сеанса
public class SessionStore {
private static final String TOKEN = "access_token";
private static final String EXPIRES = "expires_in";
private static final String KEY = "facebook-session";
public static boolean save(Facebook session, Context context) {
Editor editor =
context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();
editor.putString(TOKEN, session.getAccessToken());
editor.putLong(EXPIRES, session.getAccessExpires());
return editor.commit();
}
public static boolean restore(Facebook session, Context context) {
SharedPreferences savedSession =
context.getSharedPreferences(KEY, Context.MODE_PRIVATE);
session.setAccessToken(savedSession.getString(TOKEN, null));
session.setAccessExpires(savedSession.getLong(EXPIRES, 0));
return session.isSessionValid();
}
////////// Наконец, второй класс
открытый класс SecondClass расширяет активность {
private static final String TAG = "FacebookSample";
private static final String MSG = "Message from FacebookSample";
private Button FacebookPostButton;
private FacebookConnector facebookConnector; // I THINK THIS SHOULD BE THE ISSUE
private final Handler mFacebookHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
FacebookPostButton=(Button)findViewById(R.id.FacebookPostButton);
FacebookPostButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (SessionStore.restore(facebookConnector.getFacebook(), getApplicationContext()))
{
postMessageInThread();
}
}
});
}
Ответ №1:
Попробуйте сохранить токен доступа a a SharedPreferences.
Что-то вроде этого :
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
а затем получите ее в других действиях