Problem bei App-Erstellung [Anfänger]

  • Antworten:9
henne
  • Forum-Beiträge: 69

23.06.2014, 13:42:17 via Website

Hallo zusammen,

habe mir das Buch "Jetzt lerne ich Android 4" gekauft und gehe das nun durch um mir die App-Programmierung näher zu bringen. Jetzt soll ich eine Übung machen, wo 2 Buttons eine Fortschrittsanzeige auffüllen oder entleeren. An sich ist das meiner Meinung nach kein Problem, nur leider kann ich es nicht testen, da die App sofort nach dem Start abstürzt.

package com.example.uebung5_10;

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.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ProgressBar;
import android.os.Build;

public class MainActivity extends Activity {
private Button btn1;
private Button btn2;
public ProgressBar bar1 = (ProgressBar) findViewById(R.id.bar);

//View text = (View) findViewById(R.id.fortschritt);
private OnClickListener asdf = new OnClickListener() {
    public void onClick(View v) {

        if (v==btn1)
            bar1.incrementProgressBy(-1);
        if  (v==btn2)
            bar1.incrementProgressBy(1);



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

    btn1 = (Button) findViewById(R.id.links);
    btn2 = (Button) findViewById(R.id.rechts);
    btn1.setOnClickListener(asdf);
    btn2.setOnClickListener(asdf);
}

@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);
}

/**
 * A placeholder fragment containing a simple view.
 */

}

Ich hoffe mir kann jemand weiterhelfen, weil ich würde gerne in der App-Programmierung weiterkommen :)

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

23.06.2014, 14:25:02 via App

In der Entwicklerumgebung gibt es einen Logcat, der dir die Prozesse der Activity anzeigen kann. Funktioniert für Emulator und Android-geräte. ";)

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
henne
  • Forum-Beiträge: 69

23.06.2014, 21:11:39 via Website

06-23 21:03:43.208: D/AndroidRuntime(26577): Shutting down VM
06-23 21:03:43.208: W/dalvikvm(26577): threadid=1: thread exiting with uncaught exception (group=0x419437c0)
06-23 21:03:43.218: E/AndroidRuntime(26577): FATAL EXCEPTION: main
06-23 21:03:43.218: E/AndroidRuntime(26577): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.uebung5_10/com.example.uebung5_10.MainActivity}: java.lang.NullPointerException
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.ActivityThread.access$600(ActivityThread.java:153)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.os.Handler.dispatchMessage(Handler.java:99)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.os.Looper.loop(Looper.java:137)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.ActivityThread.main(ActivityThread.java:5289)
06-23 21:03:43.218: E/AndroidRuntime(26577): at java.lang.reflect.Method.invokeNative(Native Method)
06-23 21:03:43.218: E/AndroidRuntime(26577): at java.lang.reflect.Method.invoke(Method.java:525)
06-23 21:03:43.218: E/AndroidRuntime(26577): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
06-23 21:03:43.218: E/AndroidRuntime(26577): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
06-23 21:03:43.218: E/AndroidRuntime(26577): at dalvik.system.NativeStart.main(Native Method)
06-23 21:03:43.218: E/AndroidRuntime(26577): Caused by: java.lang.NullPointerException
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.Activity.findViewById(Activity.java:1853)
06-23 21:03:43.218: E/AndroidRuntime(26577): at com.example.uebung5_10.MainActivity.<init>(MainActivity.java:20)
06-23 21:03:43.218: E/AndroidRuntime(26577): at java.lang.Class.newInstanceImpl(Native Method)
06-23 21:03:43.218: E/AndroidRuntime(26577): at java.lang.Class.newInstance(Class.java:1130)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
06-23 21:03:43.218: E/AndroidRuntime(26577): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
06-23 21:03:43.218: E/AndroidRuntime(26577): ... 11 more
06-23 21:04:49.583: D/AndroidRuntime(27544): Shutting down VM
06-23 21:04:49.583: W/dalvikvm(27544): threadid=1: thread exiting with uncaught exception (group=0x419437c0)
06-23 21:04:49.598: E/AndroidRuntime(27544): FATAL EXCEPTION: main
06-23 21:04:49.598: E/AndroidRuntime(27544): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.uebung5_10/com.example.uebung5_10.MainActivity}: java.lang.NullPointerException
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.ActivityThread.access$600(ActivityThread.java:153)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.os.Handler.dispatchMessage(Handler.java:99)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.os.Looper.loop(Looper.java:137)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.ActivityThread.main(ActivityThread.java:5289)
06-23 21:04:49.598: E/AndroidRuntime(27544): at java.lang.reflect.Method.invokeNative(Native Method)
06-23 21:04:49.598: E/AndroidRuntime(27544): at java.lang.reflect.Method.invoke(Method.java:525)
06-23 21:04:49.598: E/AndroidRuntime(27544): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
06-23 21:04:49.598: E/AndroidRuntime(27544): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
06-23 21:04:49.598: E/AndroidRuntime(27544): at dalvik.system.NativeStart.main(Native Method)
06-23 21:04:49.598: E/AndroidRuntime(27544): Caused by: java.lang.NullPointerException
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.Activity.findViewById(Activity.java:1853)
06-23 21:04:49.598: E/AndroidRuntime(27544): at com.example.uebung5_10.MainActivity.<init>(MainActivity.java:20)
06-23 21:04:49.598: E/AndroidRuntime(27544): at java.lang.Class.newInstanceImpl(Native Method)
06-23 21:04:49.598: E/AndroidRuntime(27544): at java.lang.Class.newInstance(Class.java:1130)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
06-23 21:04:49.598: E/AndroidRuntime(27544): ... 11 more

Das steht im LogCat... Nur kann ich da leider nichts mit anfangen :(

Antworten
Alexander R.
  • Forum-Beiträge: 1.148

23.06.2014, 21:29:03 via Website

[[cite henne]]
06-23 21:04:49.598: E/AndroidRuntime(27544): Caused by: java.lang.NullPointerException
06-23 21:04:49.598: E/AndroidRuntime(27544): at android.app.Activity.findViewById(Activity.java:1853)
06-23 21:04:49.598: E/AndroidRuntime(27544): at com.example.uebung5_10.MainActivity.<init>(MainActivity.java:20)

D,h wenn ich deinen Code richtig abgezählt habe, dass er

public ProgressBar bar1 = (ProgressBar) findViewById(R.id.bar);

diese id nicht im activity_main.xml finden kann

Gruß Alexander

Antworten
henne
  • Forum-Beiträge: 69

23.06.2014, 21:33:56 via Website

Meine Activity_main.xml sieht so aus:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
xmlns:tools="http://schemas.android.com/tools&quot;
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:orientation="horizontal"
android:padding="10dp"
tools:context="com.example.uebung5_10.MainActivity"
tools:ignore="MergeRootFrame" >

&lt;Button
    android:id=&quot;@+id/links&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;JA&quot; /&gt;

&lt;FrameLayout
    android:layout_width=&quot;0dp&quot;
    android:layout_weight=&quot;1&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:measureAllChildren=&quot;false&quot; &gt;

    &lt;ProgressBar
        android:id=&quot;@+id/bar&quot;
        style=&quot;@android:style/Widget.ProgressBar.Horizontal&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;30dp&quot;
        android:layout_marginTop=&quot;15dp&quot;

        android:max=&quot;10&quot;
        android:progress=&quot;0&quot; /&gt;



&lt;/FrameLayout&gt;

&lt;Button
    android:id=&quot;@+id/rechts&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;NEIN&quot; /&gt;

</LinearLayout>

Meines (begrenzten) Wissens nach ist "bar" in der activity_main.xml enthalten.

Antworten
Lucas
  • Forum-Beiträge: 717

23.06.2014, 22:58:58 via App

Also in der Fehlermeldung steht eindeutig, dass er ein Element nicht findet.
Kann auch eins der zwei Knöpfe sein.
Ich schaue mir das morgen auf jedenfall nocheinmal genauer an und melde mich nochmal.
Wieso ist die ProgressBar denn nochmal in nem framelayout verpackt?

Antworten
Lucas
  • Forum-Beiträge: 717

23.06.2014, 23:05:51 via App

Aaaah,
ich hab den Fehler.

Und zwar legst du direkt am Anfang fest was denn die ProgressBar sein soll.
Ersetze mal ProgressBar bar1=(ProgressBar)findViewById(R.id.bar1)
Nur durch ProgressBar bar1;

Wenn du jetzt in den onCreate void gehst, siehst du dort in der zweiten Zeile, dass das Layout festgelegt wird (dies passiert immer im onCreate Thread).
Logischerweise kann es R.id.bar1 am Anfang noch ich finden, da es das Layout sozusagen nicht kennt.
Deshalb schreibst du jetzt nach dem festlegen des Layouts bar1=(ProgressBar)findViewById(R.id.bar1)
Ich hoffe das war verständlich genug.
Ansonsten besser ich morgen am PC einfach den Code aus.

Antworten
henne
  • Forum-Beiträge: 69

23.06.2014, 23:15:52 via Website

Lucas

Aaaah,
ich hab den Fehler.

Und zwar legst du direkt am Anfang fest was denn die ProgressBar sein soll.
Ersetze mal ProgressBar bar1=(ProgressBar)findViewById(R.id.bar1)
Nur durch ProgressBar bar1;

Wenn du jetzt in den onCreate void gehst, siehst du dort in der zweiten Zeile, dass das Layout festgelegt wird (dies passiert immer im onCreate Thread).
Logischerweise kann es R.id.bar1 am Anfang noch ich finden, da es das Layout sozusagen nicht kennt.
Deshalb schreibst du jetzt nach dem festlegen des Layouts bar1=(ProgressBar)findViewById(R.id.bar1)
Ich hoffe das war verständlich genug.
Ansonsten besser ich morgen am PC einfach den Code aus.

Viiielen Dank Lucas!

genau das war das Problem und echt super erklärt von dir. Ist auch sehr logisch, nur muss ein Anfänger erst einmal drauf kommen!^^

Edit: Das FrameLayout war noch drin, weil ich über die ProgressBar einen Text legen wollte. Habe den nochmal rausgelöscht, um das als Fehlerquelle auszuschließen.

— geändert am 23.06.2014, 23:17:38

Antworten
Lucas
  • Forum-Beiträge: 717

23.06.2014, 23:29:15 via App

Gerne
Ich programmiere auch noch nicht so lange. War am Anfang auch mal mein Fehler.
Als Tipp zur Fehleranalyse.
Im Fehlercode steht immer drinne, was los ist.
In dem Fall war das ja "Unable to instantiate activity"
Wenn du diese Zeile bei Google eingibst, findest du eigentlich schon genug.
Außerdem steht auch immer noch da, wo es passiert ist. In deinem Fall (MainActivity.java:20)
Bedeutet, in der Activity "MainActivity" ist in der Zeile 20 ein Fehler aufgetreten, daher findest du direkt raus wo der Fehler liegt.

— geändert am 23.06.2014, 23:30:33

Antworten
henne
  • Forum-Beiträge: 69

23.06.2014, 23:31:15 via Website

Danke, gut zu wissen. :D das war eines der wenigen Sachen, die ich komischerweise nicht bei Google eingegeben habe...

Dann will ich mal sehen, wann der nächste "unlösbare" Fehler bei mir auftritt ;)

Antworten