N
nilsV
Neues Mitglied
- 0
Hallo liebe android-hilfe Community,
mit dem Buch "Android Apps Entwickeln" von Uwe Post wage ich gerade meine ersten Schritte in die spannende Welt der App-Entwicklung.
Leider hat sich beim nachvollziehen der Übungsapp "Mueckenfang" ein Fehler eingeschlichen, der erst zur Laufzeit auftritt und außer der Meldung "Mueckenfang angehalten" keinen Hinweis liefert, was ich falsch gemacht habe.
Die App besteht aus zwei Activity's, in der ersten (MueckenfangActivity) befindet sich ein Button mit dem die zweite Activity (GameActivity) gestartet wird, in der das Spiel abläuft.
Wenn ich die App starte, wird die MueckenfangActivity geladen. Wenn ich den Button drücke, stürzt die App ab.
Quelltext der GameActivity:
Für den Fall das der Fehler nicht in der GameActivity steckt, hier der Projektordner als ZIP-Archiv:
https://www.dropbox.com/s/4pzcghm83k5yd37/mueckenfang.zip
Ich würde mich sehr freuen, wenn mir Jemand sagen kann was ich falsch gemacht habe.
EDIT:
Habe den Quelltext aus einem Texteditor kopiert, hat jemand eine Ahnung warum hier für jedes Leerzeichen ein Stern angezeigt wird und wie ich die wieder weg kriege?
Gruß
nilsV
mit dem Buch "Android Apps Entwickeln" von Uwe Post wage ich gerade meine ersten Schritte in die spannende Welt der App-Entwicklung.
Leider hat sich beim nachvollziehen der Übungsapp "Mueckenfang" ein Fehler eingeschlichen, der erst zur Laufzeit auftritt und außer der Meldung "Mueckenfang angehalten" keinen Hinweis liefert, was ich falsch gemacht habe.
Die App besteht aus zwei Activity's, in der ersten (MueckenfangActivity) befindet sich ein Button mit dem die zweite Activity (GameActivity) gestartet wird, in der das Spiel abläuft.
Wenn ich die App starte, wird die MueckenfangActivity geladen. Wenn ich den Button drücke, stürzt die App ab.
Quelltext der GameActivity:
Code:
package*de.androidnewcomer.mueckenfang2;
import*java.util.Date;
import*java.util.Random;
import*android.app.Activity;
import*android.app.Dialog;
import*android.os.Bundle;
import*android.os.Handler;
import*android.view.Gravity;
import*android.view.View;
import*android.view.View.OnClickListener;
import*android.view.ViewGroup.LayoutParams;
import*android.widget.FrameLayout;
import*android.widget.ImageView;
//import*android.widget.LinearLayout;
import*android.widget.TextView;
public*class*GameActivity*extends*Activity*implements*Runnable,*OnClickListener*{
****private*static*final*long*HOECHSTALTER_MS*=*2000;
****//private*static*final*int*INTERVALL*=*100;
****private*static*final*int*ZEITSCHEIBEN*=*600;
****private*Random*zufallsgenerator*=*new*Random();
***private*Handler*handler*=*new*Handler();
***private*FrameLayout*spielbereich;
***private*int*runde;
****private*int*punkte;
****//private*boolean*spielLaeuft;
***private*int*muecken;
***private*int*treffer;
***private*int*zeit;
****private*float*massstab;
****/***Called*when*the*activity*is*first*created.**/
****@Override
****public*void*onCreate(Bundle*savedInstanceState)*{
********super.onCreate(savedInstanceState);
********setContentView(R.layout.game);
********spielbereich*=*(FrameLayout)*findViewById(R.id.spielbereich);
********massstab*=*getResources().getDisplayMetrics().density;
********spielStarten();
****}
****@Override
****public*void*onClick(View*muecke)*{
********treffer++;
********punkte*+=*100;
********bildschirmAktualisieren();
********spielbereich.removeView(muecke);
****}
****
****@Override
****public*void*run()*{
********zeitHerunterzaelen();
****}
****private*void*spielStarten()*{
********//spielLaeuft*=*true;
********runde*=*0;
********punkte*=*0;
********starteRunde();
****}
****private*void*starteRunde()*{
********runde*=*runde*+*1;
********muecken*=*runde***10;
********treffer*=*0;
********zeit*=*60;
********bildschirmAktualisieren();
********handler.postDelayed(this,*1000);
****}
****private*void*bildschirmAktualisieren()*{
********TextView*tvPunkte*=*(TextView)findViewById(R.id.points);
********tvPunkte.setText(*Integer.toString(punkte)*);
********TextView*tvRunde*=*(TextView)findViewById(R.id.round);
********tvRunde.setText(*Integer.toString(runde)*);
********TextView*tvTreffer*=*(TextView)findViewById(R.id.hits);
********tvTreffer.setText(*Integer.toString(treffer)*);
********TextView*tvZeit*=*(TextView)findViewById(R.id.time);
********tvZeit.setText(*Integer.toString(zeit)*);
********FrameLayout*flTreffer*=*(FrameLayout)findViewById(R.id.bar_hits);
********FrameLayout*flZeit*=*(FrameLayout)findViewById(R.id.bar_time);
********LayoutParams*lpTreffer*=*flTreffer.getLayoutParams();
********lpTreffer.width*=*Math.round(*massstab***300***Math.min(treffer,*muecken)*/*muecken*);
********LayoutParams*lpZeit*=*flZeit.getLayoutParams();
********lpZeit.width*=*Math.round(massstab***zeit***300*/*60);
****}
****
****private*void*zeitHerunterzaelen()*{
********zeit*=*zeit*-*1;
********float*zufallszahl*=*zufallsgenerator.nextFloat();
********double*wahrscheinlichkeit*=*muecken***1.5*/*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*boolean*pruefeSpielende()*{
********if(zeit*==*0*&&*treffer*<*muecken)*{
************gameOver();
************return*true;
********}
********return*false;
****}
****private*boolean*pruefeRundenende()*{
********if(zeit*==*0)*{
************starteRunde();
************return*true;
********}
********return*false;
****}
****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***42);
********int*links*=*zufallsgenerator.nextInt(breite*-*muecke_breite);
********int*oben*=*zufallsgenerator.nextInt(hoehe*-*muecke_hoehe);
********ImageView*muecke*=*new*ImageView(this);
********muecke.setImageResource(R.drawable.muecke);
********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);
************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*void*gameOver()*{
********Dialog*dialog*=*new*Dialog(this,*android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);********
********dialog.setContentView(R.layout.gameover);
********dialog.show();
****}
}
Für den Fall das der Fehler nicht in der GameActivity steckt, hier der Projektordner als ZIP-Archiv:
https://www.dropbox.com/s/4pzcghm83k5yd37/mueckenfang.zip
Ich würde mich sehr freuen, wenn mir Jemand sagen kann was ich falsch gemacht habe.
EDIT:
Habe den Quelltext aus einem Texteditor kopiert, hat jemand eine Ahnung warum hier für jedes Leerzeichen ein Stern angezeigt wird und wie ich die wieder weg kriege?
Gruß
nilsV
Zuletzt bearbeitet: