textView.setText führt zu Absturz

  • 12 Antworten
  • Letztes Antwortdatum
serpel

serpel

Neues Mitglied
0
Guten Abend

Ich habe ein Anfänger Problem das mich schon die ganze Woche plagt.

Funktion: Knopf (Button) drücken -> Text anzeigen

Android Studio 0.4.6

Problem: Sobald ich den Knopf drücke, stürzt die App mit der Meldung "Wurde Angehalten" ab.

Code:
public void onButtonClickOk(View v)
    {
        textViewResult.setText("test");
    }
Wenn ich aber den textView durch einen Toast ersetze, wird dieser ohne Probleme angezeigt...

Code:
public void onButtonClickOk(View v)
    {
        Toast.makeText(this,"Hallo Welt",Toast.LENGTH_LONG).show();
     }
Muss ich irgendwie die Länge des Strings noch angeben? Oder ist der Syntax komplett falsch?
 
Beim deklarieren der Textview die falsche ID angegeben?
 
Würde der Compiler dann nicht meckern?


Fragment_main.xml
Code:
android:id="@+id/textViewResult"
Initialisierung des Oberflächen Elements:
Code:
private TextView textViewResult;
Und hier mach ich das Layout mit dem Code bekannt:
Code:
textViewResult= (TextView) findViewById(R.id.textViewResult);
Das müsste so ja stimmen.
 
Hast du irgendwo noch ein anderes Element mit der selben ID? Poste am besten mal das Fehler Log dann sieht man eher woran es liegt.
 
Ne der sucht nur und gibt einen Wert zurück

Teste doch mal gegen null

if (textViewResult != null){
log.d("TEST", "Alles io");
} else {
Log.d("TEST", " Textview ist null");
}
 
02-21 20:19:31.746 17667-17667/ch.patrick.taschenrechner E/ Device driver API match
Device driver API version: 23
User space API version: 23
02-21 20:19:31.746 17667-17667/ch.patrick.taschenrechner E/ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct 9 21:05:57 KST 2013
02-21 20:19:44.486 17667-17667/ch.patrick.taschenrechner W/dalvikvm threadid=1: thread exiting with uncaught exception (group=0x41c6c700)
02-21 20:19:44.496 17667-17667/ch.patrick.taschenrechner E/AndroidRuntime FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity

at android.view.View$1.onClick(View.java:3838)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3833)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at ch.patrick.taschenrechner.MainActivity.onButtonClickOk(MainActivity.java:78)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3833)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)

Der ursprüngliche Beitrag von 20:21 Uhr wurde um 20:24 Uhr ergänzt:

killphil75 schrieb:
if (textViewResult != null){
log.d("TEST", "Alles io");
} else {
Log.d("TEST", " Textview ist null");
}


Die Log will er so nicht schlucken. Was sollen die den machen?
Ich gebs jetzt einfach mal als Toast aus ;)

=> Text ist tatsächlich 0!

Wie muss ich das denn jetzt schreiben das der nicht 0 ist?
 
Zuletzt bearbeitet:
Log muss natürlich noch in die Imports

import android.util.Log;

=> Text ist tatsächlich 0!

-> Layout prüfen, ids noch mal prüfen
 
Hab das Objekt gelöscht und einmal so kompiliert. Genau der gleiche Effekt wie wenn es da ist.

Danach die id geändert, nützt auch nichts.

Danach hab ich mal probiert den Text im Button zu ändern:
Code:
 buttonOk.setText("test");
Geht auch nicht :(
Kann es sein, das ich irgendwie auf der "falschen" ebene bin?
Das layout ist in der Fragment_main.xml und der weisse Hintergrund hat keine id...
 
Was ist den "onButtonClickOk"? Warum kriegt die eine View übergeben? Wie sieht dein OnClickListener für den Button aus?

Zeig doch bitte mal mehr Code ...
 
kleinerkathe schrieb:
Was ist den "onButtonClickOk"?

Das ist ne Funktion die aufgerufen wird, wenn der Butten geklickt wird. Funktioniert zuverlässig, aber ist anscheinend nicht sooo toll? (Kenn das so von C#)

Code:
package ch.patrick.taschenrechner;
 import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.util.Log;
  
 
 public class MainActivity extends Activity{

      //Oberflächenelemente
 
    private EditText editTextNumber1;
    private EditText editTextNumber2;
    private EditText editTextOperand;
    private Button   buttonOk;
    private TextView textViewTest;
  
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
         //Layout und Code bekannt machen
 
        editTextNumber1 = (EditText) findViewById(R.id.editTextNumber1);
        editTextNumber2 = (EditText) findViewById(R.id.editTextNumber2);
        editTextOperand = (EditText) findViewById(R.id.editTextOperand);
        buttonOk = (Button) findViewById(R.id.buttonOk);
        textViewTest= (TextView) findViewById(R.id.textViewTest);
 
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }
  
     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
     @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 /***************************************************************************************/
    public void onButtonClickOk(View v)
    {
        //Toast.makeText(this,"Hallo Welt",Toast.LENGTH_LONG).show();
        
       textViewTest.setText("test");
        
        if (textViewTest != null){
            Toast.makeText(this,"Alles gut",Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this,"Text ist 0",Toast.LENGTH_LONG).show();
        }
         if (textViewTest != null){
            Log.d("TEST", "Alles io");
        } else {
            Log.d("TEST", " Textview ist null");
        }
    }
 /******************************************************************************************/
     /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
         public PlaceholderFragment() {
        }
         @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        }
    }
 }
 
Zeig mal deine activity_main und deine fragment_main ... Möchtest du mit fragments arbeiten? ;)

Achso, du schreibst in der XML beim Button direkt in "onClick" welche Methode aufgerufen wird? Ist okay, ich persönlich mags nicht, da man dadurch XML und Code miteinander fest verdrahtet ... Wenn du im Code festlegst, was für eine Methode aufgerufen wird, wenn der Button betätigt wird, kannst du die Methode "schneller" austauschen und man sieht vll. auch schneller was den dein Code macht bei einem ButtonClick. (bei einem Button vll. noch nicht relevant, aber hab mal aufwendigere Views in denen verschiedenste Aktionen ausgeführt werden)
 
Genau so mach ich's. Muss mich noch etwas eingewöhnen, was sinn macht und was nicht. Werde mir das mit dem Listener mal anschauen.

Möchtest du mit fragments arbeiten?
Gibt's alternativen? Dan nur her damit :)

Hier noch die Fragment_main.xml
(Wollte ursprünglich mal einen einfachen Taschenrechner machen)

Code:
 <RelativeLayout xmlns:android="[URL]http://schemas.android.com/apk/res/android[/URL]"
    xmlns:tools="[URL]http://schemas.android.com/tools[/URL]"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="ch.patrick.taschenrechner.MainActivity$PlaceholderFragment">
     <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editTextOperand"
        android:editable="true"
        android:inputType="text"
        android:hint="@string/Operand"
        android:layout_alignParentTop="true"
        android:layout_marginTop="60dp"
        android:layout_toLeftOf="@+id/editTextNumber2" />
     <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/editTextNumber2"
        android:enabled="true"
        android:numeric="integer|signed|decimal"
        android:hint="@string/Number2"
        android:layout_alignTop="@+id/editTextOperand"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
     <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ButtonCalculate"
        android:id="@+id/buttonOk"
        android:enabled="true"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="onButtonClickOk" />
     <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@id/edittextNumber1"
        android:hint="@string/Number1"
        android:layout_above="@+id/buttonOk"
        android:layout_toLeftOf="@+id/editTextNumber1"
        android:layout_marginRight="21dp" />
     <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/textViewTest"
        android:layout_below="@+id/buttonOk"
        android:layout_alignLeft="@+id/buttonOk"
        android:layout_alignStart="@+id/buttonOk"
        android:layout_marginTop="42dp" />
 </RelativeLayout>
 

Anhänge

  • GUI.png
    GUI.png
    5,2 KB · Aufrufe: 280
So jetzt hat's geklappt :)

Hab noch einmal neu und sauber angefangen und hab jetzt keine Probleme mehr!
 
Zurück
Oben Unten