我是Android Studio中的新手,我为Android Studio中的朋友制作了一个点击应用程序,带有Imageview和Textview。但是,当我使用模拟器启动应用程序时,我成为报告" LeonClicker一直停止。并且在代码中没有错误。
//Variablen
public float geld;
public float gewinn;
public int recycling;
public int shops;
public int rabatt;
public ImageView Leon;
public ImageView recyclingBild;
public ImageView shopsBild;
public ImageView rabattBild;
public TextView geldAnzeige;
//Variablen, für das Speichern von unserem Spielstand
public SharedPreferences pref;
public SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
geld = 0F;
gewinn = 0.02F;
recycling = 0;
shops = 0;
rabatt = 1;
Leon = (ImageView) findViewById(R.id.Leon);
recyclingBild = (ImageView)findViewById(R.id.recyclingBild);
shopsBild = (ImageView)findViewById(R.id.shopbild);
rabattBild = (ImageView)findViewById(R.id.salebild);
//Shared Data vorbereiten
pref = getSharedPreferences("LeonClicker", 0);
editor = pref.edit();
//Lade die Spielstände in die Variablen. Falls noch keine Spielstände vorhanden sind, dann benutze die Werte der Variablen, die hier drüber definiert wurden.
geld = laden("geld", geld);
recycling = laden("recycling", recycling);
shops = laden("shops", shops);
rabatt = laden("rabatt", rabatt);
Leon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
verkaufeKaffee();
}
});
rabattBild.setOnClickListener(new View.OnClickListener() {
//Wird aufgerufen, wenn wir das ImageView anklicken
@Override
public void onClick(View view) {
//Wird aufgerufen, wenn "onClick" aufgerufen wird.
kaufeRabatt();
}
});
recyclingBild.setOnClickListener(new View.OnClickListener() {
//Wird aufgerufen, wenn wir das ImageView anklicken
@Override
public void onClick(View view) {
//Wird aufgerufen, wenn "onClick" aufgerufen wird.
kaufeRecycling();
}
});
shopsBild.setOnClickListener(new View.OnClickListener() {
//Wird aufgerufen, wenn wir das ImageView anklicken
@Override
public void onClick(View view) {
//Wird aufgerufen, wenn "onClick" aufgerufen wird.
kaufeShop();
}
});
//Den Geldbetrag zum Start der App anzeigen
geldAnzeige.setText("Geld: " + String.format("%.2f", geld) + "€");
vergebeBelohnung();
cancelAlarm(this);
setAlarm(this);
}
public void verkaufeKaffee(){
//Übernehme die globale Variable "gewinn" als lokale Variable, um kurzzeitig Berechnungen durchführen zu können, ohne die Variable "gewinn" für die gesamte App ändern zu müssen
float gewinn = this.gewinn;
//Maximiere den Gewinn, durch die Stufe des Recyclings (0,001€ mehr Gewinn pro Stufe)
gewinn = gewinn + (recycling * 0.001F);
//Verkaufe mehr, durch die Genehmigung von Rabatten, sofern es überhaupt Rabatt gibt (pro Rabattstufe einen verkauften Kaffee mehr, aber auch 1% pro Rabattstufe) (einfache Prozentrechnung)
if(rabatt > 1) {
gewinn = (gewinn * rabatt) * (1 - (rabatt * 0.01F));
}
//Verkaufe mehr, durch die Anzahl der erworbenen Shops (1 verkaufter Kaffee + Anzahl der Shops)
gewinn = gewinn + (gewinn * shops);
//Unser neues Geld besteht aus unserem Geld + unserem Gewinn pro Kaffee
geld = geld + gewinn;
//Ändere die Textausgabe
geldAnzeige.setText("Geld: " + String.format("%.2f", geld) + "€");
speichern("geld", this.geld);
}
public void kaufeShop(){
//Preis für einen Shop berechnen
int preis = (int) Math.pow(2, shops) * 1000;
//Prüfen, ob der Spieler genug Geld besitzt
if(geld >= preis){
//Der Spieler besitzt mehr oder genau so viel Geld, wie benötigt
//Unser neues Geld besteht aus unserem Geld - dem Preis für einen neuen Shop
geld = geld - preis;
//Anzahl der Shops um 1 erhöhen
shops++;
//Ändere die Textausgabe
geldAnzeige.setText("Geld: " + String.format("%.2f", geld) + "€");
speichern("shops", this.shops);
}else{
//Der Spieler besitzt weniger Geld, als benötigt
//Meldug mittels Toast ausgeben
Toast.makeText(this, preis + "€ sind nötig.", Toast.LENGTH_SHORT).show();
}
}
public void kaufeRecycling(){
//Preis für eine neue Recyclingstufe berechnen
int preis = (int) Math.pow(2, recycling) * 50;
//Prüfen, ob der Spieler genug Geld besitzt
if(geld >= preis){
//Der Spieler besitzt mehr oder genau so viel Geld, wie benötigt
//Unser neues Geld besteht aus unserem Geld - dem Preis für eine neue Stufe
geld = geld - preis;
//Anzahl der Shops um 1 erhöhen
recycling++;
//Ändere die Textausgabe
geldAnzeige.setText("Geld: " + String.format("%.2f", geld) + "€");
speichern("recycling", this.recycling);
}else{
//Der Spieler besitzt weniger Geld, als benötigt
//Meldug mittels Toast ausgeben
Toast.makeText(this, preis + "€ sind nötig.", Toast.LENGTH_SHORT).show();
}
}
public void kaufeRabatt(){
//Prüfen, wie oft der Rabatt bereits gekauft wurde
if(10 >= rabatt) {
//Es wurden bisher weniger als 10% Rabatt erteilt
//Preis für eine Rabattstufe berechnen
int preis = (int) Math.pow(2, rabatt) * 10;
//Prüfen, ob der Spieler genug Geld besitzt
if (geld >= preis) {
//Der Spieler besitzt mehr oder genau so viel Geld, wie benötigt
//Unser neues Geld besteht aus unserem Geld - dem Preis für eine neue Stufe
geld = geld - preis;
//Anzahl der Shops um 1 erhöhen
rabatt++;
//Ändere die Textausgabe
geldAnzeige.setText("Geld: " + String.format("%.2f", geld) + "€");
speichern("rabatt", this.rabatt);
} else {
//Der Spieler besitzt weniger Geld, als benötigt
//Meldug mittels Toast ausgeben
Toast.makeText(this, preis + "€ sind nötig.", Toast.LENGTH_SHORT).show();
}
}else{
//Es wurden bereits 10% Rabatt erteilt
//Meldug mittels Toast ausgeben
Toast.makeText(this, "Es wurden bereits 10% Rabatt erteilt.", Toast.LENGTH_SHORT).show();
}
}
//Funktion "speichern", für Ganzzahlen (int)
public void speichern(String name, int wert){
//Wert für die Speicherung vorbereiten
editor.putInt(name, wert);
//Wert speichern
editor.commit();
}
//Funktion "speichern", für Kommazahlen (float)
public void speichern(String name, float wert){
//Wert für die Speicherung vorbereiten
editor.putFloat(name, wert);
//Wert speichern
editor.commit();
}
//Funktion "laden", für Ganzzahlen (int)
public int laden(String name, int standardwert){
return pref.getInt(name, standardwert);
}
//Funktion "laden", für Kommazahlen (float)
public float laden(String name, float standardwert){
return pref.getFloat(name, standardwert);
}
//Berechnet die Belohnung, die ein Spieler zu bekommen hat, wenn er wieder zum Spiel zurückkehrt.
public void vergebeBelohnung(){
//Momentane Zeit in Millisekunden, seit dem 1.1.1970
Long zeitMilli = System.currentTimeMillis();
//Momentane Zeit in Sekunden, seit dem 1.1.1970
int zeit = (int) (zeitMilli / 1000);
//Zeit des letzen Aufrufes in Sekunden (Wenn es vorher keinen Aufruf gab, dann setze die letzte Zeit auf jetzt)
int letzteZeit = laden("letzteZeit", zeit);
//Vergangene volle Stunden, seit dem letzten Aufruf
int stunden = (zeit - letzteZeit) / 3600;
//Verkaufe Kaffees für jede vergangene Stunde
for(int i = 0; i < stunden; i++){
verkaufeKaffee();
}
//setze die momentane Zeit als die Zeit des letzten Aufrufes
speichern("letzteZeit", zeit);
//Meldug mittels Toast ausgeben
Toast.makeText(this, "Belohunung, für die Rückkehr, erhalten.", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbar_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_ueber:
// Dieser Teil (bis zum "return") wird ausgeführt, wenn wir auf den Menüpunkt mit der ID "menu_ueber" klicken.
DialogFragment newFragment = new UeberDialog();
newFragment.show(this.getFragmentManager(), "Über");
return true;
default:
// Standardfunktion. Sollte bestehen bleiben.
return super.onOptionsItemSelected(item);
}
}
//Kleine Klasse zum Erstellen eines Dialogs
public static class UeberDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//Dialog erstellen
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
//Befülle Dialog mit dem Text "ueber_text" aus der Datei res -> strings.xml
builder.setMessage(R.string.ueber_text)
//Erstelle einen Button mit dem Text "ok" aus der Datei res -> strings.xml
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//Schließe das Dialogfeld, beim Klick auf den erstellten Button
dismiss();
}
});
//Gib das erstellte Dialogfeld an die aufrufende Klasse zurück, um es anzeigen zu können.
return builder.create();
}
}
//Registriert einen Alarm in einem Tag. (86400 Sekunden)
public void setAlarm(Context context) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Erinnerung.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 60 * 24, pi); // Millisekunden * Sekunden * Minuten * Stunden
}
//Bricht einen laufenden Alarm ab.
public void cancelAlarm(Context context) {
Intent intent = new Intent(context, Erinnerung.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
答案 0 :(得分:0)
在这一行
Leon = (ImageView) findViewById(R.id.Leon);
你有R.id. Leon !! android id名称不能有大写字符。 请将您的ImageView的ID更改为xml文件中的 leon