我正在尝试从将BroadcastReceiver扩展到自定义SaveSharedPreferences类的类(SMSSendingWeb)调用我的方法(saveSharedpreferences.setCountReceived)。
我的问题是它无法保存到SharedPreferences中没有任何反应。 我很困惑我的代码问题在哪里。
此方法中的参数在
时出错saveSharedpreferences.setCountReceived(SMSSendingWeb.this,countReceived);
我将其更改为上下文也有错误
saveSharedpreferences.setCountReceived(context,countReceived);
这是我的代码:请查看setCountReceived()
public class SaveSharedPreferences {
static final String PREF_USER_NAME= "username";
static final String PREF_COUNT_RECEIVED= "received";
static SharedPreferences getSharedPreferences(Context ctx) {
return PreferenceManager.getDefaultSharedPreferences(ctx);
}
//==========================================================
public static void setCountReceived(Context ctx, Integer countReceived)
{
SharedPreferences.Editor editor = getSharedPreferences(ctx).edit();
editor.putInt(PREF_COUNT_RECEIVED, countReceived);
editor.commit();
}
}
Android code:
public class SMSSendingWeb extends BroadcastReceiver {
RestService restService;
public static Integer countReceived = 0;
SaveSharedPreferences saveSharedpreferences;
@Override
public void onReceive(Context context, Intent intent) { //for Receiving
restService = new RestService();
saveSharedpreferences = new SaveSharedPreferences();
Bundle b = intent.getExtras();
Object[] pduObj= (Object[]) b.get("pdus");
String mobileno = null;
String message = null;
String data = null;
for(int i=0;i<pduObj.length;i++){
SmsMessage smsMessage=SmsMessage.createFromPdu((byte[]) pduObj[i]);
//get the sender number
mobileno=smsMessage.getOriginatingAddress();
//get the sender message
message=smsMessage.getMessageBody();
data="From : "+mobileno+"\n Message : "+message;
}
SMSInbox sms = new SMSInbox();
sms.MobileNo = mobileno;
sms.Message = message;
restService.getService().addSMS(sms, new Callback<String>() {
@Override
public void success(String s, Response response) {
//Toast.makeText(, "Successfully added", Toast.LENGTH_LONG).show();
countReceived += 1;
saveSharedpreferences.setCountReceived(SMSSendingWeb.this, countReceived);
Log.d("API inside restService", "count: " + countReceived);
}
@Override
public void failure(RetrofitError error) {
//Toast.makeText(MainActivity.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
}
});
countReceived += 1;
Log.d("API outside restService", "count: " + countReceived);
saveSharedpreferences.setCountReceived(context, countReceived);
}
答案 0 :(得分:2)
您正在尝试访问首选项而不是共享首选项,两者之间存在细微差别。从this answer
开始Preferences是一种用于存储和检索的Android轻量级机制 成对的原始数据类型(也称为地图和关联 阵列)。
在表单的每个条目中,键是一个字符串,值必须是a 原始数据类型。
当我们需要他们时:
首选项通常用于保存状态信息和共享 应用程序的几个活动之间的数据。
共享首选项是Android中可用于存储的存储 存储一些与功能,用户相关的基本内容。定制 或其个人资料。
假设您要在应用中保存用户名,以备将来使用。 你不能在数据库中保存这么小的东西,所以你最好保留它 保存在您的首选项中。首选项就像一个文件,来自 您可以在应用程序的生命周期中随时检索值 KEY-VALUE对方式。
再举一个例子,如果你使用whatsapp,我们有一个壁纸选项 那里。应用程序如何知道哪个图像用作墙纸 你什么时候打开你的whatsapp。此信息存储在 喜好。每当您清除任何应用程序的数据时,首选项都是 删除
您正在使用偏好设置并尝试在共享首选项中写入值,因此我只是将您的代码更改为使用共享首选项。
用于保存偏好
public static void setCountReceived(Context ctx, Integer countReceived)
{
SharedPreferences.Editor editor = getSharedPreferences(YOUR_PREF_NAME,MODE_PRIVATE).edit();
editor.putInt(PREF_COUNT_RECEIVED, countReceived);
editor.commit();
}
用于检索首选项,
static SharedPreferences getSharedPreferences(Context ctx) {
return context.getSharedPreferences(YOUR_PREF_NAME,MODE_PRIVATE);
}