2017-06-25 32 views
0

我是Android Studio中的新成員,我使用Imageview和Textview爲Android Studio中的朋友製作了一個Click App。但是,當我開始與模擬器的應用程序,我成爲報告「LeonClicker保持停止,而且在代碼中沒有錯誤。該應用程序始終開始

Here is the Report

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

} 
+1

你檢查了logcat嗎? – digitizedx

回答

0

在這一行

Leon = (ImageView) findViewById(R.id.Leon); 

你有R.id. Leon !! android id name不能有大寫字母 請把你的ImageView的id改爲leon在您的xml文件中