2017-07-19 9 views
-1

Immer wenn ich meine Aktivität starte, stürzt es ab. Ich weiß nicht, was das Problem ist. Mein Code, XML-Ressourcen und Android-Manifest sieht gut aus. Wenn jemand mir helfen könnte, wäre das geschätzt!Android: Meine App stürzt beim Start ab

Das Problem wird durch ein android.view.WindowManager$BadTokenException verursacht, die in der LogCat erwähnt wird

Java-Code

package com.example.hp.machine; 

import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class Machine extends AppCompatActivity { 

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

     Button click = (Button) findViewById(R.id.click); 

     click.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(Machine.this); 
       builder.setTitle("Warning") 
         .setIcon(R.drawable.bomb) 
         .setMessage("Do you want to Die ?") 
         .setCancelable(false) ; 


       AlertDialog alert = builder.create(); 
       alert.show(); 


      } 
     }); 



    } 
} 

XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/machine" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.hp.machine.Machine" 
    android:background="@drawable/splash_screen" 
    > 

    <Button 
     android:layout_height="wrap_content" 
     android:layout_width="130dp" 
     android:text="click" 
     android:layout_marginTop="200dp" 
     android:id="@+id/click" 
     android:textColor="@android:color/white" 
     android:textStyle="bold" 
     android:fontFamily="serif" 
     android:background="@android:color/background_dark" 
     /> 

</RelativeLayout> 

Manifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.hp.machine"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".Machine"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

LogCat

Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
                      at android.view.ViewRootImpl.setView(ViewRootImpl.java:789) 
                      at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:298) 
                      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
                      at android.app.Dialog.show(Dialog.java:325) 
                      at com.example.hp.machine.Machine.onCreate(Machine.java:46) 
                      at android.app.Activity.performCreate(Activity.java:6609) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)  
                      at android.app.ActivityThread.access$1000(ActivityThread.java:218)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:145)  
                      at android.app.ActivityThread.main(ActivityThread.java:7007)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:372)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
07-19 17:13:23.830 28841-28841/com.example.hp.machine I/Process: Sending signal. PID: 28841 SIG: 9 
+0

[Siehe das Update zu meiner Antwort] (https://Stackoverflow.com/a/45193312/6296561) – Zoe

Antwort

0

Ändern der getBaseContext() zu Machine.this

package com.example.hp.machine; 

     import android.app.AlertDialog; 
     import android.content.DialogInterface; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     import android.view.View; 
     import android.widget.Button; 
     import android.widget.Toast; 

     public class Machine extends AppCompatActivity { 

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

      Button click = (Button) findViewById(R.id.click); 


      AlertDialog.Builder builder = new AlertDialog.Builder(Machine.this); 
      builder.setTitle("Warning") 
        .setIcon(R.drawable.bomb) 
        .setMessage("Do you want to Die ?") 
        .setCancelable(false) ; 


      AlertDialog alert = builder.create(); 
       alert.show(); 



      } 
     } 
+0

Ich habe versucht, aber das gibt mir Fehler .. dann habe ich versucht (Machine.this) es funktioniert gut. Kein Fehler erscheint. immer noch meine App Absturz .. Ich denke, Problem ist mit der Software –

+0

@ Pratik Dhingani Lösung versuchen ...kombiniert mit Machine.this –

0

gehe ich davon aus, den Raum in AppCompatActivity (der Teil erstrecken) ist ein SO Problem importieren.

Sie verwenden getBaseContext, wenn Sie den Kontext auf das aktuelle Objekt verweisen:

AlertDialog.Builder builder = new AlertDialog.Builder(Machine.this 
    /*Inside nested classes, this refers to that class. This is just good practice to do even 
    if you aren't inside a nested class/thread*/); 

Wenn Dialoge zeigt, müssen Sie es tun:

  • Auf dem UI-Thread
  • Mit der Anwendungskontext

Wenn Sie außerhalb des UI-Threads arbeiten, endet die Ausgabe d Fenster.


Gerade jetzt gesehen, laufen Sie auf einem anderen Thread.

Innerhalb der onClick Methode, fügen Sie diese:

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     //Add your dialog code here 
    } 
}); 

und fügen Sie innerhalb des Dialogcode.

0

Sie können nicht schreiben AlertDialog in onCreate() Methode.

Ersetzen Sie es bei onResume() Methode.

+0

Können Sie erklären, warum nicht? –

+0

Funktioniert es, wenn ich eine Methode deklariere und einen Alarmdialog in dieser Methode führe und ihn dann in der onCreate() Methode aufrufe? –

+0

ich versuche diese Lösung aber nicht funktioniert. Vielleicht ist es das Problem mit den Android Studios –

0

Eine Sache, die ich nicht verstehe, wie onClick abgerufen werden, während Aktivität erstellt wird. onClick sollte beim Klicken auf das Ereignis aufgerufen werden.

+0

1) Dies ist ein Kommentar. 2) Manche Leute lassen Details aus, wenn sie Fragen stellen, wie die Tatsache, dass sie einen Knopf drücken, um sie auszulösen. Der Dialog ist der Grund, und es wird nicht magisch genannt. OP muss den Knopf drücken, so sagt der Stacktrace – Zoe