2016-09-21 3 views
0

Ich habe eine Klasse, die 'Serializable' implementiert, aber ich bin nicht in der Lage, den Kontext meiner Haupttätigkeit darin zu erhalten. Hier ist mein Code für diese Klasse:Erhalten Sie den Kontext der Aktivität in einer serialisierbaren Klasse

public class Game implements Serializable{ 
private String name; 
private ColorTheme theme; 
private int distance = 0; 
private int score = 0; 
boolean boom = false; 
protected Context context; 

public Game(MainActivity context){ 
    this.context = context.getApplicationContext(); 
} 

Danach dachte ich, ich den Kontext und dann, was ich will, ist, dass, wenn die Punktzahl größer als 1 ist dann die App geschlossen ist.

Ich möchte mein Spiel innerhalb dieser Bedingung schließen, aber es gibt mir keine Option, den Kontext zu beenden. Bitte hilf mir, wo ich falsch liege. Ich denke, der Kontext ist in dieser Serializable-Klasse nicht erfolgreich implementiert. Hilfe

benötigt
+0

Wie Sie Ihr Spiel schließen ? Vom ** Spiel ** POJO? –

+0

Ich möchte schließen, wenn die Punktzahl größer als 1 ist. –

+0

Ok, aber WER wird das tun? Die Klasse ** Spiel **? –

Antwort

0

FYI

eine Anwendung in der Spielklasse Schließen, ist kein guter Ansatz, es besser ist es im Inneren der Aktivität itselfs zu tun. Eine gute Lösung dafür könnte eine Methode in der Klasse Spiel wie folgt erschaffen:

public boolean shouldCloseApplication(){ 
    return this.score > 1; 
} 

und in der Aktivität, verwenden Sie die folgenden Schritte aus:

if(game.shouldCloseApplication()){ 
    //close the application as mentioned below 
    this.finishAffinity(); 
} 

Sagte, dass, wenn Sie wollen die Anwendung schließen, müssen Sie einfach

this.finishAffinity(); 

refer to this SO post nennen.

Anstatt also vorbei "MainActivity", verwenden Sie direkt die "Context" passing es mit

Game game = new Game(MainActivity.this); 

und Empfangen mit

public Game(Context context){ 
    this.context = context; 
} 

und verwenden Sie es mit

if(score > 1) 
{ 
    context.finishAffinity(); 
} 

nicht vorgeschlagen, sondern arbeitet

wenn dies nicht verwenden

context.getActivity().finish(); 
System.exit(0); 

Hoffnung funktioniert das hilft

+0

Ok lass mich das versuchen sir –

+0

Wie im Kommentar unter der Originalfrage erwähnt - das ist ein BADES Design! –

+0

@TodorKostov was meinst du? Welcher Teil ist ein schlechtes Design? –

-1

versuchen diese

public Game(MainActivity context){ 
this.context = context; 
} 


score = (i+1); 
if (score >1){ 

PackageManager pm = context.getPackageManager(); 
         Intent i = new Intent("android.intent.action.MAIN"); 
         i.addCategory("android.intent.category.HOME"); 
         List<ResolveInfo> lst = pm.queryIntentActivities(i, 0); 
         if (lst != null) { 
          for (ResolveInfo resolveInfo : lst) { 
           try { 
            ApplicationInfo ai = pm.getApplicationInfo(
                resolveInfo.activityInfo.packageName,0); 
            if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
             Intent goHome = new Intent(); 
             goHome.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
             goHome.setClassName(
               resolveInfo.activityInfo.packageName, 
               resolveInfo.activityInfo.name); 
             context.startActivity(goHome); 
             int pid = android.os.Process.myPid(); 
             android.os.Process.killProcess(pid); 
             break; 
            } 
           } catch (NameNotFoundException e) { 
            logMessage(LOG_TYPE_ERROR, "AppConstant-exitFromApp-kill", e.getMessage()); 
           } 
          } 
         } 

} 
+0

das Ende() Schlüsselwort schließt nur die aktuelle Aktivität, es beendet nicht die Anwendung, wenn er mehr hat als eine Aktivität im Stapel öffnen –

+0

Bitte, fügen Sie einige Erklärung zu Ihrer Antwort wie was genau der Code tut und warum! Bitte überdenken Sie auch Ihr Design! Das ist so ein schlechter Ansatz! –

Verwandte Themen