Android 无法使用ASyncTask在SharedReferences中保存值
我正在开发一个twitter客户端,我可以成功登录并获取访问令牌并显示它,我想将令牌保存在共享首选项中,稍后使用它们(以避免用户每次登录) 我使用AsyncTask获取令牌,在执行后我放置共享首选项,但它强制关闭 这是我的异步:Android 无法使用ASyncTask在SharedReferences中保存值,android,twitter,android-asynctask,sharedpreferences,Android,Twitter,Android Asynctask,Sharedpreferences,我正在开发一个twitter客户端,我可以成功登录并获取访问令牌并显示它,我想将令牌保存在共享首选项中,稍后使用它们(以避免用户每次登录) 我使用AsyncTask获取令牌,在执行后我放置共享首选项,但它强制关闭 这是我的异步: private class GetAccessTokenTask extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(
private class GetAccessTokenTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... strings) {
String verifier = strings[0];
try {
accessToken = twitter.getOAuthAccessToken(verifier);
Log.d(MainActivity.class.getSimpleName(), accessToken.getToken());
} catch (Exception e) {
Log.d(MainActivity.class.getSimpleName(),"nooooooooooooooooooooooo");
}
return null;
}
@Override
protected void onPostExecute(Void result){
Editor editor = mSharedPreferences.edit();
editor.putString(ACCESS_TOKEN , accessToken.getToken());
editor.putString(ACCESS_SECRET, accessToken.getTokenSecret() );
editor.commit();
Toast.makeText(getApplicationContext(), "hola", 54).show();
super.onPostExecute(result);
}
}
似乎
mSharedPreferences
是null
。您可以覆盖onPreExecute
方法的AsynkTask
并创建sharedreferences
对象msahredreferences
,也可以在onPostExecute
中执行相同的操作
@Override
protected void onPostExecute(Void result){
mSharedPreferences = getSharedPreferences(<Name>, <Mode>);
Editor editor = mSharedPreferences.edit();
editor.putString(ACCESS_TOKEN , accessToken.getToken());
editor.putString(ACCESS_SECRET, accessToken.getTokenSecret() );
editor.commit();
Toast.makeText(getApplicationContext(), "hola", 54).show();
super.onPostExecute(result);
}
@覆盖
受保护的void onPostExecute(void结果){
mSharedPreferences=getSharedReferences(,);
Editor=mSharedPreferences.edit();
putString(ACCESS_TOKEN,accessToken.getToken());
putString(ACCESS_SECRET,accessToken.getTokenCret());
commit();
Toast.makeText(getApplicationContext(),“hola”,54.show();
super.onPostExecute(结果);
}
请注意,您需要在
上下文中调用getSharedReferences
,如果您没有在活动中执行任务
请包括stacktrace。您在哪里引用了您的SharedReferences?应通过构造函数将mSharedPreferences传递给asynctaskShare stacktrace,并选中“mSharedPreferences”变量,是否已初始化?这可能是空的。请确保您正在创建mSharedPreferences。在(,)中写入什么将导致语法错误
@Override
protected void onPostExecute(Void result){
mSharedPreferences = getSharedPreferences(<Name>, <Mode>);
Editor editor = mSharedPreferences.edit();
editor.putString(ACCESS_TOKEN , accessToken.getToken());
editor.putString(ACCESS_SECRET, accessToken.getTokenSecret() );
editor.commit();
Toast.makeText(getApplicationContext(), "hola", 54).show();
super.onPostExecute(result);
}