2017-12-21 3 views
-2

Ich denke, das Problem ist in der Zeile counter.getTag().toString();. Ich habe versucht, es in eine Zeichenfolge zu setzen und dann an tappedCounter übergeben, aber immer noch stürzt meine App.Tippen auf ein ImageView stürzt die App

Es wäre sehr hilfreich, wenn jemand mir hilft, herauszufinden, wie wir mit dem Logcat im Android Studio Probleme lösen können. Hier

ist die logcat: -

12-22 02:09:59.790 14251-14251/com.example.msq.practice E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.msq.practice, PID: 14251 
                      java.lang.IllegalStateException: Could not execute method for android:onClick 
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                       at android.view.View.performClick(View.java:6256) 
                       at android.view.View$PerformClick.run(View.java:24701) 
                       at android.os.Handler.handleCallback(Handler.java:789) 
                       at android.os.Handler.dispatchMessage(Handler.java:98) 
                       at android.os.Looper.loop(Looper.java:164) 
                       at android.app.ActivityThread.main(ActivityThread.java:6541) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
                      Caused by: java.lang.reflect.InvocationTargetException 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                       at android.view.View.performClick(View.java:6256) 
                       at android.view.View$PerformClick.run(View.java:24701) 
                       at android.os.Handler.handleCallback(Handler.java:789) 
                       at android.os.Handler.dispatchMessage(Handler.java:98) 
                       at android.os.Looper.loop(Looper.java:164) 
                       at android.app.ActivityThread.main(ActivityThread.java:6541) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
                       at com.example.msq.practice.MainActivity.click(MainActivity.java:27) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                       at android.view.View.performClick(View.java:6256) 
                       at android.view.View$PerformClick.run(View.java:24701) 
                       at android.os.Handler.handleCallback(Handler.java:789) 
                       at android.os.Handler.dispatchMessage(Handler.java:98) 
                       at android.os.Looper.loop(Looper.java:164) 
                       at android.app.ActivityThread.main(ActivityThread.java:6541) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

MainActivity: -

package com.example.msq.practice; 

    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.widget.ImageView; 
    import android.view.View; 

    public class MainActivity extends AppCompatActivity { 

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

     int activePlayer = 0; 
     int[] gameState = {2,2,2,2,2,2,2,2,2}; 
     int[][] winningPositions = {{1,2,3}, {4,5,6}, {7,8,9}, {0,3,6},     
     {1,4,7,}, {2,5,8}, {0,4,8}, {2,4,6}}; 
     boolean isGameActive = true; 
     String result; 
     String tag; 

     public void click(View view){ 

      ImageView counter = (ImageView) view; 

      tag = counter.getTag().toString(); 

      int tappedCounter = Integer.parseInt(tag); 

      if(gameState[tappedCounter] == 2 && isGameActive == true){ 

       counter.setTranslationY(-5000f); 

       gameState[tappedCounter] = activePlayer; 
       if(activePlayer == 0){ 
        counter.setImageResource(R.drawable.circle); 
        activePlayer = 1; 
       } 
       else{ 
        counter.setImageResource(R.drawable.cross); 
        activePlayer = 0; 
       } 



counter.animate().rotation(360f).translationYBy(5000f).setDuration(1000); 

    } 

    for(int[] winningPosition : winningPositions){ 

     if(gameState[winningPosition[0]] == gameState[winningPosition[1]] && 
       gameState[winningPosition[1]] == gameState[winningPosition[2]] && 
       gameState[winningPosition[0]] != 2){ 

      isGameActive = false; 

      if(gameState[winningPosition[0]]==0){ 
       result = "PLayer 1 Won !"; 
      } 
      else{ 
       result = "PLayer 2 Won !"; 
      } 

     } 
     else{ 

      boolean isGameOver = true; 
      for(int counterState : gameState){ 
       if(counterState == 2) isGameOver = false; 
      } 

      if(isGameOver) 
       result = "It's a Draw"; 

     } 
    } 
} 

    } 

activity_main.xml Datei: -

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.msq.practice.MainActivity"> 



     <GridLayout 


     android:id="@+id/gLayout" 
     android:layout_width="300dp" 
     android:layout_height="300dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:layout_marginBottom="106dp" 
     android:layout_marginEnd="42dp" 
     android:layout_marginStart="42dp" 
     android:layout_marginTop="105dp" 
     android:background="@drawable/board" 
     android:columnCount="3" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     tools:rowCount="3"> 

     <ImageView 
      android:id="@+id/imageView0" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="0" 
      android:layout_marginStart="10dp" 
      android:layout_marginTop="10dp" 
      android:layout_row="0" 
      android:contentDescription="@string/cross" 
      android:onClick="click" /> 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="1" 
      android:layout_marginStart="20dp" 
      android:layout_marginTop="10dp" 
      android:layout_row="0" 
      android:contentDescription="@string/cross" 
      android:onClick="click" /> 

     <ImageView 
      android:id="@+id/imageView3" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="0" 
      android:layout_marginStart="10dp" 
      android:layout_marginTop="22dp" 
      android:layout_row="1" 
      android:contentDescription="@string/cross" 
      android:onClick="click" /> 

     <ImageView 
      android:id="@+id/imageView4" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="1" 
      android:layout_marginStart="20dp" 
      android:layout_marginTop="22dp" 
      android:layout_row="1" 
      android:contentDescription="@string/cross" 
      android:onClick="click" /> 

     <ImageView 
      android:id="@+id/imageView5" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="2" 
      android:layout_marginStart="20dp" 
      android:layout_marginTop="22dp" 
      android:layout_row="1" 
      android:contentDescription="@string/cross" 
      android:onClick="click"/> 

     <ImageView 
      android:id="@+id/imageView7" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="1" 
      android:layout_marginStart="20dp" 
      android:layout_marginTop="22dp" 
      android:layout_row="2" 
      android:contentDescription="@string/cross" 
      android:onClick="click" /> 

     <ImageView 
      android:id="@+id/imageView8" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="2" 
      android:layout_marginStart="20dp" 
      android:layout_marginTop="22dp" 
      android:layout_row="2" 
      android:contentDescription="@string/cross" 
      android:onClick="click" /> 

     <ImageView 
      android:id="@+id/imageView6" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="0" 
      android:layout_marginStart="10dp" 
      android:layout_marginTop="22dp" 
      android:layout_row="2" 
      android:contentDescription="@string/cross" 
      android:onClick="click" /> 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_column="2" 
      android:layout_marginStart="22dp" 
      android:layout_marginTop="10dp" 
      android:layout_row="0" 
      android:contentDescription="@string/cross" 
      android:onClick="click"/> 


    </GridLayout> 
</android.support.constraint.ConstraintLayout> 
+0

Beide Antworten scheinen korrekt zu sein. Wenn sie nicht für Sie arbeiten, erklären Sie, warum. –

Antwort

-1

Sie sind kein Tag überall in der Einstellung App oder das XML. Also wird getTag null zurückgeben. Wenn eine Ansicht ein Tag haben soll, müssen Sie es hinzufügen.

-1

Die verursacht durch: Teil eines Logcat identifiziert die Ursache des Absturzes. Wenn Sie den Logcat sorgfältig lesen, ist der letzte Grund für den Absturz ein NullPointerException.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

Jetzt versuchen Sie den Wert des Tags mit getTag() zu bekommen, aber Sie haben keinen Tag auf einen der ImageView in Ihrem XML-Layout festgelegt. Daher ist die Markierung null, die die Ausnahme wirft, wenn toString aufgerufen wird.

+0

ohk jetzt habe ich es, danke –

+0

Verstand, es als die richtige Antwort zu markieren, so dass andere davon profitieren können? @ Msq-9 –