2016-08-02 23 views
0

Ich habe 4 Aktivitäten: MainActivity, p1, p2, p3.SharedPreferences funktioniert nicht beim Neustart App

Meine App funktioniert gut, aber das Problem hier ist, dass, wenn app force Stop oder flick up App in Home-Taste zu schließen, und wenn die App wieder geöffnet wird, scheint die gemeinsame Leistung gelöscht.

Ich benutze editor.apply(), aber immer noch nicht funktioniert.

MainActivity:

public class MainActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_page); 



     final Button resume = (Button) findViewById(R.id.resume); 
     Button next = (Button) findViewById(R.id.next); 
     Button exit = (Button) findViewById(R.id.exit); 


     resume.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       final String PREFS_NAME = "MyPrefsFile"; 

       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 

       if (settings.getBoolean("my_first_time", true)) { 

        resume.setEnabled(false); 

        Log.d("Comments", "First time"); 


        settings.edit().putBoolean("my_first_time", false).commit(); 
       }else 
       { 

        MainActivity.this.finish(); 

       } 
      } 
     }); 

     next.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, p1.class); 
       startActivity(intent); 
      } 
     }); 

     exit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(Intent.ACTION_MAIN); 
       intent.addCategory(Intent.CATEGORY_HOME); 
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(intent); 
      } 
     }); 
    } 
    } 

Xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:text="resume" 
     android:layout_width="wrap_content" 
     android:id="@+id/resume" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:text="next" 
     android:id="@+id/next" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/exit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="exit"/> 
</LinearLayout> 

P1:

public class p1 extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.p1); 

     Button next = (Button) findViewById(R.id.next); 
     Button home=(Button)findViewById(R.id.home); 

     next.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(p1.this, p2.class); 
       startActivity(intent); 

      } 
     }); 

     home.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       Intent intent = new Intent(p1.this, MainActivity.class); 
       startActivity(intent); 

      } 
     }); 

} 
    private void storeCurrentActivity(){ 
     SharedPreferences myPref =getSharedPreferences("APP_SHARED_PREF", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor=myPref.edit(); 
     editor.putString("lastactivity", p1.this.getClass().getSimpleName()); 
     editor.commit(); 

    } 
    @Override 
    public void onResume(){ 
     super.onResume(); 
     storeCurrentActivity(); 
    } 

} 

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:text="next" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/next"/> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="page 1"/> 
    <Button 
     android:text="go in main" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/home"/> 

</LinearLayout> 

und p2, p3 wie p1.

+0

Sind Sie auf Android 4.2? – Shaishav

+0

Was meinst du mit "nicht funktioniert"? – Kelevandos

+0

mein Android 4.4.2 – erfan

Antwort

0

Sie nur diese Werte speichern in Sharedpreference onPause() Methode :)

Android Shared preferences example

Update:

ich in der Regel Einstellungen Klasse (Singleton-Muster) erstellen, die Getter aussetzt und Setter zum schnellen Lesen und Speichern von Werten in SharedPreferences. Ich injiziere die gleiche Instanz von Einstellungen irgendwo im Code mit Dolch als Dependency Injector.

Warum sollten wir Singletonmuster verwenden: Why use a singleton instead of static methods?

Ich will Ihnen ein Beispiel Präferenz Klasse geben:

public class Preferences { 

    private SharedPreferences sharedPreferences; 
    private final String NOTIFICATIONS_ENABLED = "NOTIFICATIONS_ENABLED"; 

    @Inject 
    public Preferences(Context context) { 
     sharedPreferences = context.getSharedPreferences("Preferences", 0); 
    } 

    public void setNotificationsEnabled(boolean enabled){ 
     SharedPreferences.Editor edit = sharedPreferences.edit(); 
     edit.putBoolean(NOTIFICATIONS_ENABLED, enabled); 
     edit.commit();   
    } 

    public boolean isNotificationsEnabled(){ 
     return sharedPreferences.getBoolean(NOTIFICATIONS_ENABLED, true); 
    } 
} 

Und es verwenden, wo immer Sie wollen:

public class MainActivity extends Activity { 

    @Inject 
    NavigationController navigationController; 

    @Inject 
    Preferences preferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     SharedObjectGraph.getObjectGraph().inject(this); 

     if(preferences.isNotificationsEnabled()){ 
      // do something 
     } 
    } 
+1

also was muss ich tun?Wenn Sie vorschlagen, sagen Sie mir genau – erfan

+0

@erfan Hallo, Wenn Sie diese Werte speichern möchten, selbst wenn Sie die Home-Taste drücken, überschreiben Sie einfach die onPause() -Methode und rufen Sie die storeCurrentActivity() -Methode auf. Dies im Grunde über Android-Aktivität-Lebenszyklus: https://developer.android.com/training/basics/activity-lifecycle/pausing.html – alway5dotcom

+1

Hallo dude danke für Hilfe Ich bin neu in Android und mein Englisch ist Woche, wenn Sie bitte Hilfe wollen schreibe Codes und sag mir, wo muss man das Thema setzen: '( – erfan

0

Sie sind Setzen von 0 als Standardwert bei der Einstellung von sharedPreference und in if-Bedingungsprüfung ist es falsch ...

PREFS_NAME = "MyPrefsFile"; und

if (settings.getBoolean ("my_first_time", true))

passen verschiedenen Bedingungen. Name geändert

+0

so was ist dein Punkt? erkläre mehr oder schreibe codes ich brauche – erfan

+0

ich denke du verstehst mich schlecht. Ich denke, Problem ist in sharedPreference in p1 nicht Mainactivity – erfan

Verwandte Themen