D
derkevin92
Neues Mitglied
- 0
Hallo, ich bin hier gerade auf der Fehlersuche warum die App abstürzt nachdem ich den Button geklickt habe.
Habe die App 1 zu 1 einem Tutorial nachgemacht aber ich habe Android Studio anstatt Eclipse verwendet. Ich dachte es sollte auch so gehen.
Ganz am Anfang steht da ja NullPointerException, ich habe die Stickies gelesen dazu aber das hat mir in dem Fall einfach nicht weitergeholfen, da dass sich ja auf java bezieht und ich hier irgendwie mit dem Android Kram zu kämpfen habe.
Es wird auf ein Objekt zugegriffen das nicht existiert schätze ich mal aber die Ursache warum es noch nicht erzeugt worden ist, ist mir hier unklar. Habe extra darauf geachtet das die OnCreate methode ganz oben steht und alles eigentlich sauber ablaufen sollte....
PS: Bin noch ein ziemlicher Android Newbie über Hilfe oder auch nur Gedanken anstöße sehr dankbar
Logcat sagt folgendes:
Android Manifest:
GameActivity:
Habe die App 1 zu 1 einem Tutorial nachgemacht aber ich habe Android Studio anstatt Eclipse verwendet. Ich dachte es sollte auch so gehen.
Ganz am Anfang steht da ja NullPointerException, ich habe die Stickies gelesen dazu aber das hat mir in dem Fall einfach nicht weitergeholfen, da dass sich ja auf java bezieht und ich hier irgendwie mit dem Android Kram zu kämpfen habe.
Es wird auf ein Objekt zugegriffen das nicht existiert schätze ich mal aber die Ursache warum es noch nicht erzeugt worden ist, ist mir hier unklar. Habe extra darauf geachtet das die OnCreate methode ganz oben steht und alles eigentlich sauber ablaufen sollte....
PS: Bin noch ein ziemlicher Android Newbie über Hilfe oder auch nur Gedanken anstöße sehr dankbar
Logcat sagt folgendes:
09-08 19:42:59.763 8581-8581/com.example.mad.mueckenfang E/AndroidRuntime FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mad.mueckenfang/com.example.mad.mueckenfang.GameActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
at android.app.ActivityThread.access$600(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:4987)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1851)
at com.example.mad.mueckenfang.GameActivity.<init>(GameActivity.java:34)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newActivity(Instrumentation.java:1039)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
************at android.app.ActivityThread.access$600(ActivityThread.java:139)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:156)
************at android.app.ActivityThread.main(ActivityThread.java:4987)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:511)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
************at dalvik.system.NativeStart.main(Native Method)
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mad.mueckenfang/com.example.mad.mueckenfang.GameActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
at android.app.ActivityThread.access$600(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:4987)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1851)
at com.example.mad.mueckenfang.GameActivity.<init>(GameActivity.java:34)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newActivity(Instrumentation.java:1039)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
************at android.app.ActivityThread.access$600(ActivityThread.java:139)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:156)
************at android.app.ActivityThread.main(ActivityThread.java:4987)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:511)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
************at dalvik.system.NativeStart.main(Native Method)
Android Manifest:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mad.mueckenfang" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MyActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".GameActivity"
android:label="@string/title_activity_game" >
</activity>
</application>
</manifest>
GameActivity:
Code:
package com.example.mad.mueckenfang;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Date;
import java.util.Random;
public class GameActivity extends Activity implements View.OnClickListener, Runnable {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
}
boolean spielLaeuft;
int runde, punkte, gefangeneMuecken, muecken, zeit;
private float massstab;
private Random zufallsgenerator = new Random();
private static final long HOECHSTALTER_MS = 2000;
FrameLayout spielbereich = (FrameLayout)findViewById(R.id.spielbereich);
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.game, 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);
}
private void spielStarten(){
spielLaeuft = true;
runde = 0;
punkte = 0;
starteRunde();
}
private void starteRunde(){
runde++;
muecken = runde * 10;
gefangeneMuecken = 0;
zeit = 60;
bildschirmAktualisieren();
handler.postDelayed(this,1000);
}
@Override
public void run(){
zeitHerunterzaehlen();
}
private void bildschirmAktualisieren(){
TextView tvPunkte = (TextView)findViewById(R.id.points);
tvPunkte.setText(Integer.toString(punkte));
//TextView stellt immer Strings dar kein Int!! Deswegen Integer.toString(punkte)!
TextView tvRunde = (TextView)findViewById(R.id.round);
tvRunde.setText(Integer.toString(runde));
FrameLayout flTreffer =(FrameLayout)findViewById(R.id.bar_hits);
FrameLayout flZeit = (FrameLayout)findViewById(R.id.bar_time);
massstab = getResources().getDisplayMetrics().density;
ViewGroup.LayoutParams lpTreffer = flTreffer.getLayoutParams();
lpTreffer.width = Math.round(massstab * 300 * Math.min(gefangeneMuecken,muecken) / muecken);
ViewGroup.LayoutParams lpZeit = flZeit.getLayoutParams();
lpZeit.width = Math.round(massstab * zeit * 300 / 60);
}
private void zeitHerunterzaehlen(){
float zufallszahl = zufallsgenerator.nextFloat();
double ZEITSCHEIBEN = 300/60;
zeit--;
double wahrscheinlichkeit = muecken * 1.5f / ZEITSCHEIBEN;
if(wahrscheinlichkeit > 1 ){
eineMueckeAnzeigen();
if(zufallszahl < wahrscheinlichkeit -1){
eineMueckeAnzeigen();
}else{
if(zufallszahl < wahrscheinlichkeit ){
eineMueckeAnzeigen();
}
}
mueckenVerschwinden();
bildschirmAktualisieren();
if(!pruefeSpielende()){
if(!pruefeRundenende()){
handler.postDelayed(this, 1000);
};
}
}
}
private void eineMueckeAnzeigen(){
int breite = spielbereich.getWidth();
int hoehe = spielbereich.getHeight();
int muecke_breite = (int) Math.round(massstab*50);
int muecke_hoehe=(int) Math.round(massstab*50);
int links = zufallsgenerator.nextInt(breite - muecke_breite);
int oben = zufallsgenerator.nextInt(hoehe - muecke_hoehe);
ImageView muecke = new ImageView(this);
muecke.setImageResource(R.drawable.biene);
muecke.setOnClickListener(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_breite, muecke_hoehe);
params.leftMargin= links;
params.topMargin=oben;
params.gravity = Gravity.TOP + Gravity.LEFT;
spielbereich.addView(muecke,params);
muecke.setTag(R.id.geburtsdatum, new Date());
}
private void mueckenVerschwinden(){
int nummer = 0;
while(nummer < spielbereich.getChildCount()){
ImageView muecke = (ImageView) spielbereich.getChildAt(nummer);
nummer = nummer +1;
Date geburtsdatum = (Date) muecke.getTag(R.id.geburtsdatum);
long alter = (new Date()).getTime() - geburtsdatum.getTime();
if (alter > HOECHSTALTER_MS){
spielbereich.removeView(muecke);
}else{
nummer++;
}
}
}
private Handler handler = new Handler();
@Override
public void onClick(View muecke){
gefangeneMuecken++;
punkte +=100;
bildschirmAktualisieren();
spielbereich.removeView(muecke);
}
private void gameOver(){
Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.gameover);
dialog.show();
}
private boolean pruefeSpielende(){
if(zeit == 0 && gefangeneMuecken < muecken){
gameOver();
return true;
}
return false;
}
private boolean pruefeRundenende(){
if(zeit == 0){
starteRunde();
return true;
}
return false;
}
}