2015-09-22 6 views
0

Я использую общие настройки. Я сохраняю 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> 

+5

Не могли бы вы включить ошибку сообщение, которое вы возвращаете, если вы вернете его обратно? Кроме того, поскольку мы не знаем, что представляют собой эти объекты, не могли бы вы также включить еще какой-то контекст? Вы программируете на Android? – Makoto

+0

У вас может быть такая же проблема, как у меня было некоторое время назад; проблема с потоками, решенная добавлением флага MODE_MULTI_PROCESS: http://stackoverflow.com/a/8742735/1127492 – Stefan

+0

Я попытался это сделать. Я попробовал все возможные режимы –

ответ

0

Я могу видеть, где data Строка создается. Вы передаете его в качестве аргумента в обоих классах, я думаю, чтобы получить() то, что вы сохранили первым (MainActivity); но поскольку загрузка выполняется в методе onCreate(), я действительно не вижу, где вы устанавливаете переменную data. Таким образом, вместо написания:

sPref.getString(data, ""); 

Пожалуйста, просто проверить с помощью проводной ключа, например:

//saving, (`MainActivity`) 
ed.putString("DATA_KEY","aasdjf"); 

//loading, (`Mainactivity2`) 
sPref.getString("DATA_KEY", ""); 

На обоих Савина и извлечения, и если что-то изменится

+0

ВЫ ХОРОШЕЕ !!!!! Такая полная ошибка! Большое спасибо!! –

+0

Это работает? Мне следовало бы бросать NullPointersEx ... – Shine

+0

ЕГО ЖИТЬ! ОНО ЖИВОЕ!! Возможно, не было NullPointersEx, потому что он работает, пока я не уничтожу процесс. Android делал что-то вроде дефолта, но когда приложения закрываются, по умолчанию очищается. Строковые данные. и данные теперь знают, что внутри.)) –

Смежные вопросы