我使用共享偏好设置。我保存String然后从另一个活动中调用它。一切都很好。但是,如果我杀了我的应用程序的过程,或者我重新启动设备,共享首选项不起作用。似乎共享首选项已清除wile重启或终止进程。我阅读了很多论坛,但最近的答案是"不要忘记使用editor.commit()"。 我使用SONY手机,我尝试在三星标签上安装它,但结果是一样的。
我创建了新的最简单的应用程序,但结果是一样的。
MainActivity
package com.example.nes.test;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btnext,SavePref;
public static SharedPreferences sPref;
String data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnext = (Button)findViewById(R.id.btnext);
btnext.setOnClickListener(this);
SavePref = (Button)findViewById(R.id.SavePref);
SavePref.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnext:
Intent intent = new Intent(this,Main2Activity.class);
startActivity(intent);break;
case R.id.SavePref:
sPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor ed = sPref.edit();
ed.putString(data,"aasdjf");
ed.commit();break;
}
}
}
Mainactivity2
package com.example.nes.test;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class Main2Activity extends AppCompatActivity {
SharedPreferences sPref;
String data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
sPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());;
String database = sPref.getString(data, "");
Toast.makeText(this, database, Toast.LENGTH_LONG).show();
}
}
清单
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Main2Activity"
android:label="@string/title_activity_main2" >
</activity>
</application>
答案 0 :(得分:0)
我可以看到实例化data
字符串的位置。你在两个类中都将它作为参数传递,我想是为了检索(Mainactivity2
)你先保存的内容(MainActivity
);但由于负载是在onCreate()
方法中完成的,我实际上无法看到您在哪里设置data
变量。所以,而不是写:
sPref.getString(data, "");
请使用有线密钥进行测试,如下所示:
//saving, (`MainActivity`)
ed.putString("DATA_KEY","aasdjf");
//loading, (`Mainactivity2`)
sPref.getString("DATA_KEY", "");
无论是savin还是检索,看看是否有变化