Я использую общие настройки. Я сохраняю String и затем перезвоню из другого действия. Все работает хорошо. Но если я убью процесс своего приложения или перезагружу устройство, общие настройки не будут работать. Похоже, что общие настройки очищены от перезагрузки или убийства. Я читал много форумов, но самый последний ответ - «не забывайте использовать editor.commit()». Я использую мобильный телефон SONY, я пытаюсь установить его на вкладку Samsung, но результат тот же.Общие предпочтения не являются постоянными
Я создал новое простейшее приложение, но результат тот же.
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>
Не могли бы вы включить ошибку сообщение, которое вы возвращаете, если вы вернете его обратно? Кроме того, поскольку мы не знаем, что представляют собой эти объекты, не могли бы вы также включить еще какой-то контекст? Вы программируете на Android? – Makoto
У вас может быть такая же проблема, как у меня было некоторое время назад; проблема с потоками, решенная добавлением флага MODE_MULTI_PROCESS: http://stackoverflow.com/a/8742735/1127492 – Stefan
Я попытался это сделать. Я попробовал все возможные режимы –