2016-04-30 9 views
0

Ok Ich habe ein Togglebutton in meiner Haupttätigkeit. Ich möchte, dass der Status dieser Schaltfläche gespeichert wird, wenn ich zu einer anderen Aktivität wechseln, die App minimieren und ein Dienst den Button-Status auf false setzen kann (nicht angeklickt). Alles hat gut funktioniert, aber aus irgendeinem Grund, als ich Android Studio wieder gestartet habe, hat es nicht mehr funktioniert ?!Togglebutton-Status mit gemeinsamen Voreinstellungen nicht über asynctask änderbar

MainActivity:

monitor = (ToggleButton)findViewById(R.id.toggleButton); 
     monitor.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (monitor.isChecked()) { 
        Intent intent = new Intent(MainActivity.this, NotifiyService.class); 
        startService(intent); 
       } else { 
        Intent intent = new Intent(MainActivity.this, NotifiyService.class); 
        stopService(intent); 
       } 
      } 
     }); 

Im OnStop Verfahren die folgenden ausgeführt wird:

if (monitor.isChecked()) 
    { 
     tbstate = true; 
     SharedPreferences sharedPreferences1 = getSharedPreferences("tbstate",MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences1.edit(); 
     editor.putBoolean("keyTB",tbstate); 
     editor.commit(); 
    } 
    else 
    { 
     tbstate = false; 
     SharedPreferences sharedPreferences1 = getSharedPreferences("tbstate",MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences1.edit(); 
     editor.putBoolean("keyTB",tbstate); 
     editor.commit(); 
    } 

Die onStart Methode:

//get Togglebutton state 
     SharedPreferences sharedPreferences6 = getSharedPreferences("tbstate", MODE_PRIVATE); 
     monitor.setChecked(sharedPreferences6.getBoolean("keyTB",false)); 

AsyncTask (nicht vollständig). In der onPostExecute setze ich tbstate auf false und in onDestroy wird es in der geteilten Präferenz gespeichert. Dann erscheint eine Meldung, die zur Main2activity der gleichen App "führt". Wenn ich von main2activity zu mainactivity gehe, ist der togglebutton noch aktiviert. Ich hoffe, es ist klar, was ich ;-) will

@Override 
    public void onDestroy() { 
     //super.onDestroy(); 
     Th1.interrupt(); 
     checkhttp.cancel(false); 
     SharedPreferences sharedPreferences8 = getSharedPreferences("tbstate",MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences8.edit(); 
     editor.putBoolean("keyTB", tbstate); 
     Toast.makeText(NotifiyService.this,getResources().getString(R.string.MonStopped), Toast.LENGTH_LONG).show(); 
     stopSelf(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO: Return the communication channel to the service. 
     return null; 
    } 

    private static class HttpTaskParams{ 
     boolean value; 
     String address; 

     HttpTaskParams(boolean value, String address){ 
      this.value = value; 
      this.address = address; 
     } 

    } 

    private class HttpTask extends AsyncTask<HttpTaskParams,Void,Boolean>{ 

     @Override 
     protected Boolean doInBackground(HttpTaskParams... params) { 
      boolean value = params[0].value; 
      String address = params[0].address; 
      try { 
       URL url = new URL(address); 
       HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
       httpURLConnection.setRequestMethod("HEAD"); 
       httpURLConnection.setConnectTimeout(3000); 
       httpURLConnection.setReadTimeout(3000); 
       httpURLConnection.connect(); 
       value = true; 
       return value; 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
       value = false; 
       return value; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       value = false; 
       return value; 
      } 
     } 
     @Override 
     protected void onPostExecute(Boolean result) { 
      if(result){ 

       //Notification in Status Bar 
       NotificationCompat.Builder builder = new NotificationCompat.Builder(NotifiyService.this); 
       builder.setSmallIcon(R.drawable.dummy); 
       Intent intent = new Intent(NotifiyService.this, Main2Activity.class); 
       intent.setAction(Intent.ACTION_MAIN); 
       intent.addCategory(Intent.CATEGORY_LAUNCHER); 
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       PendingIntent pendingIntent = PendingIntent.getActivity(NotifiyService.this,0,intent,0); 
       builder.setContentIntent(pendingIntent); 
       builder.setLights(Color.YELLOW, 600, 600); 
       builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
       builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.dummy)); 
       builder.setContentTitle(getResources().getString(R.string.newNotify)); 
       builder.setContentText(getResources().getString(R.string.newNotify2)); 
       builder.setAutoCancel(true); 
       NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
       notificationManager.notify(1, builder.build()); 

       tbstate=false; 
       onDestroy(); 
      } 
     } 
    } 

Antwort

1

Sie rufen müssen commit() -Methode der gemeinsamen Einstellungseditor nach jeder Änderung der gemeinsamen Vorliebe .. Sie haben das nicht in OnDestroy Methode

+0

Ouw Mann, thx so viel. Wie konnte ich das nicht sehen (vielleicht war es mein Wut-O-Meter, der durch das Dach ging ;-) – Patrick260284

1

Es geschieht, weil onPostExecute Methoden nach onDestroy der Aktivität führt und Einstellungen gespeichert nicht. Sie müssen Einstellungen in onPostExecute Methode speichern zu

+0

Thx Mann genannt :-) Es schien zu funktionieren, nachdem Aloks antwortete, aber ich tat auch deine. – Patrick260284

Verwandte Themen