该应用程序一直在启动

时间:2017-06-25 16:48:51

标签: android

我是Android Studio中的新手,我为Android Studio中的朋友制作了一个点击应用程序,带有Imageview和Textview。但是,当我使用模拟器启动应用程序时,我成为报告" 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 个答案:

答案 0 :(得分:0)

在这一行

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

你有R.id. Leon !! android id名称不能有大写字符。 请将您的ImageView的ID更改为xml文件中的 leon