Error:(111, 17) error: unreachable statement

  • Antworten:11
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 29

28.06.2016, 18:05:57 via Website

image

Hallo mal wieder :D,
ich hab ein Problem mit Android Studio (Shared Preferences ).
Ich habe wie immer den Code für die Shared Preferences geschrieben und wie man sehen kann funktioniert es ja bei et 1 (Edit Text) . Dann habe ich das ganze kopiert und et1 durch et2 ersetzt. Jedoch wird mir jetzt dort eine Fehlermeldung angezeigt.
Warum?

Danke für eure Hilfe :D
LG

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.171

28.06.2016, 18:13:34 via Website

Ja etwas Überblick über seinen Code solltem an schon haben.
Liegt daran, dass über dem IF statement ein break steht, was die aktuelle Methode verlassen lässt, somit würde die IF nie ausgeführt werden.
Warum steht das überhaupt da?

LG Pascal //It's not a bug, it's a feature. :) ;)

Jordi Müller

Antworten
  • Forum-Beiträge: 29

28.06.2016, 19:46:26 via Website

Hallo,
ich habe jetzt den Code so geschrieben das er ohne Fehlermeldung ausgeführt werden kann (danke erstmal ;))
Jetzt habe ich die App auf meinem Handy, jedoch stürzt sie ab wenn ich auf den lade Button drücke.
Könnte jemand mal schnell über den Text schauen?
Ich weiß wirklich nicht woran es liegen könnte.
Danke im Vorraus;)

LG

package treasureisland.schoolmanager;

import android.app.Activity;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Notizen extends AppCompatActivity implements View.OnClickListener {

Button speichern;
Button laden;
Button löschen;
boolean testboolean = true;
boolean speichernboolean;


EditText et1, et2, et3, et4, et5, et6, et7, et8, et9, et10;

TextView tv1, tv2, tv3, tv4, tv5, tv6, tv7, tv8, tv9, tv10;


String eingabetxt;
String eingabetxt2;
String eingabetxt3;
String eingabetxt4;
String eingabetxt5;
String eingabetxt6;
String eingabetxt7;
String eingabetxt8;
String eingabetxt9;
String eingabetxt10;



String auslesen;


final String KEY1 = "key1";
final String KEY2 = "key2";
final String KEY3 = "key3";
final String KEY4 = "key4";
final String KEY5 = "key5";
final String KEY6 = "key6";
final String KEY7 = "key7";
final String KEY8 = "key8";
final String KEY9 = "key9";
final String KEY10 = "key10";


SharedPreferences prefs;
SharedPreferences.Editor prefseditor;






@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_notizen);

    Button speichern = (Button) findViewById(R.id.speichern);
    Button laden = (Button) findViewById(R.id.laden);
    Button löschen = (Button) findViewById(R.id.löschen);

    speichern.setOnClickListener(this);
    laden.setOnClickListener(this);
    löschen.setOnClickListener(this);



    et1 = (EditText) findViewById(R.id.et1);
    et2 = (EditText) findViewById(R.id.et2);
    et3 = (EditText) findViewById(R.id.et3);
    et4 = (EditText) findViewById(R.id.et4);
    et5 = (EditText) findViewById(R.id.et5);
    et6 = (EditText) findViewById(R.id.et6);
    et7 = (EditText) findViewById(R.id.et7);
    et8 = (EditText) findViewById(R.id.et8);
    et9 = (EditText) findViewById(R.id.et9);
    et10 = (EditText) findViewById(R.id.et10);

    tv1 = (TextView)findViewById(R.id.tv1);
    tv2 = (TextView)findViewById(R.id.tv2);
    tv3 = (TextView)findViewById(R.id.tv3);
    tv4 = (TextView)findViewById(R.id.tv4);
    tv5 = (TextView)findViewById(R.id.tv5);
    tv6 = (TextView)findViewById(R.id.tv6);
    tv7 = (TextView)findViewById(R.id.tv7);
    tv8 = (TextView)findViewById(R.id.tv8);
    tv9 = (TextView)findViewById(R.id.tv9);
    tv10 = (TextView)findViewById(R.id.tv10);

    prefs = this.getSharedPreferences("prefsdatei1" , MODE_PRIVATE);
    prefseditor = prefs.edit();
}
    @Override
    public void onClick(View view){

        switch (view.getId()){
            case R.id.speichern: {


                if (et1.getText().length()>0){
                eingabetxt = et1.getText().toString();
                prefseditor.putString(KEY1,eingabetxt);
                prefseditor.putBoolean("key2", testboolean);
                prefseditor.commit();


                } else {
                Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
            }


            if (et2.getText().length()>0){
                eingabetxt2 = et2.getText().toString();
                prefseditor.putString(KEY2,eingabetxt2);
                prefseditor.commit();


        } else {
            Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
        }


        if (et3.getText().length()>0){
            eingabetxt3 = et1.getText().toString();
            prefseditor.putString(KEY3,eingabetxt3);
            prefseditor.commit();


    } else {
    Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
}


if (et4.getText().length()>0){
    eingabetxt4 = et1.getText().toString();
    prefseditor.putString(KEY4,eingabetxt4);
    prefseditor.commit();

} else {
Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
}

    if (et5.getText().length()>0){
    eingabetxt5 = et1.getText().toString();
    prefseditor.putString(KEY5,eingabetxt5);
    prefseditor.commit();


    } else {
    Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
    }


    if (et6.getText().length()>0){
    eingabetxt6 = et1.getText().toString();
    prefseditor.putString(KEY6,eingabetxt6);
    prefseditor.commit();


    } else {
    Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
    }


    if (et7.getText().length()>0){
    eingabetxt7 = et1.getText().toString();
    prefseditor.putString(KEY7,eingabetxt7);
    prefseditor.commit();


    } else {
        Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_LONG).show();
    }


    if (et8.getText().length()>0){
    eingabetxt8 = et1.getText().toString();
    prefseditor.putString(KEY8,eingabetxt8);
    prefseditor.commit();


    } else {
    Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_LONG).show();
    }


    if (et9.getText().length()>0){
    eingabetxt9 = et1.getText().toString();
    prefseditor.putString(KEY9,eingabetxt9);
    prefseditor.commit();


    } else {
    Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
    }


    if (et10.getText().length()>0){
    eingabetxt10 = et1.getText().toString();
    prefseditor.putString(KEY10,eingabetxt10);
    prefseditor.commit();


    } else {
    Toast.makeText(getApplicationContext(), "Kein Text", Toast.LENGTH_SHORT).show();
    }

break;
}

    case R.id.laden: {

        auslesen = prefs.getString(KEY1, "Kein Text gespeichert");
        speichernboolean = prefs.getBoolean("key2", false);
        Toast.makeText(getApplication(), Boolean.toString(speichernboolean) , Toast.LENGTH_SHORT).show();



        auslesen = prefs.getString(KEY2, "Kein Text gespeichert");
        tv1.setText(auslesen);


      auslesen= prefs.getString(KEY3, "Kein Text gespeichert");
        tv2.setText(auslesen);


        auslesen = prefs.getString(KEY4, "Kein Text gespeichert");
        tv3.setText(auslesen);


       auslesen = prefs.getString(KEY5, "Kein Text gespeichert");
        tv4.setText(auslesen);


        auslesen = prefs.getString(KEY6, "Kein Text gespeichert");
        tv4.setText(auslesen);


        auslesen = prefs.getString(KEY7, "Kein Text gespeichert");
        tv5.setText(auslesen);


        auslesen = prefs.getString(KEY8, "Kein Text gespeichert");
        tv6.setText(auslesen);


        auslesen = prefs.getString(KEY9, "Kein Text gespeichert");
        tv7.setText(auslesen);


       auslesen = prefs.getString(KEY10, "Kein Text gespeichert");
        tv8.setText(auslesen);

        auslesen = prefs.getString(KEY10, "Kein Text gespeichert");
        tv9.setText(auslesen);

        auslesen = prefs.getString(KEY10, "Kein Text gespeichert");
        tv10.setText(auslesen);

        break;
    }



    case R.id.löschen:{

    prefseditor.remove(KEY1);
        prefseditor.remove("key2");
    prefseditor.commit();
    tv1.setText(null);




    prefseditor.remove(KEY2);
    prefseditor.commit();
    tv1.setText(null);




    prefseditor.remove(KEY3);
    prefseditor.commit();
    tv1.setText(null);




    prefseditor.remove(KEY4);
    prefseditor.commit();
    tv1.setText(null);




    prefseditor.remove(KEY5);
    prefseditor.commit();
    tv1.setText(null);




    prefseditor.remove(KEY6);
    prefseditor.commit();
    tv1.setText(null);





    prefseditor.remove(KEY7);
    prefseditor.commit();
    tv1.setText(null);





    prefseditor.remove(KEY8);
    prefseditor.commit();
    tv1.setText(null);





    prefseditor.remove(KEY9);
    prefseditor.commit();
    tv1.setText(null);





    prefseditor.remove(KEY10);
    prefseditor.commit();
    tv1.setText(null);

    break;
            }
        }
    }





}

Antworten
  • Forum-Beiträge: 29

28.06.2016, 20:24:32 via Website

Als Fehlermeldung kommt nur das während die App ausgeführt wird, und ich glaube das hilft dir nicht viel:

06-28 20:16:54.609 10096-10096/treasureisland.schoolmanager E/AndroidRuntime: FATAL EXCEPTION: main
Process: treasureisland.schoolmanager, PID: 10096
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:225)
at treasureisland.schoolmanager.Notizen.onClick(Notizen.java:234)
at android.view.View.performClick(View.java:5697)
at android.widget.TextView.performClick(TextView.java:10826)
at android.view.View$PerformClick.run(View.java:22526)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.171

28.06.2016, 20:31:16 via Website

Netürlich hilft das viel.
Damit behebt man den Fehler am Ende:
06-28 20:16:54.609 10096-10096/treasureisland.schoolmanager E/AndroidRuntime: FATAL EXCEPTION: main
Process: treasureisland.schoolmanager, PID: 10096
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:225)
at treasureisland.schoolmanager.Notizen.onClick(Notizen.java:234)

Fehler hier ist, dass eine boolean nicht in einen Strin umgewandelt werden kann (ohne Boolean.ToString/String.valueOf)
Der fehler selber tritt in Notizen.java Ziele 234 auf, habs dir oben auch markiert, damit kannst du suchen, wo das 1. Vorkommen von einer datei von dir ist, da nach dem Doppelpunkt die Zeile szteht, kannst dud da dann hingehen und schauen was da nicht stimmt.
So läuft die Fehlersuche ab, wobei manchmal richtiges Debugging auch hilfreich ist.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jordi Müller

Antworten
  • Forum-Beiträge: 2.492

28.06.2016, 20:33:23 via Website

Könntest du noch sagen wo Zeile 234 ist? Da entsteht nämlich der Fehler.
Ich glaub aber hier ist er:
Du machst

auslesen = prefs.getString(KEY2, "Kein Text gespeichert");

Wobei sich aber in KEY2 doch ein Boolean befindet/befinden kann ( prefseditor.putBoolean("key2", testboolean);)

— geändert am 28.06.2016, 20:34:35

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.171

28.06.2016, 20:39:38 via Website

Jo da hst du recht :)
Übersehen.
Zudem finde ich die ganze Key geschichte etwas unübersichtlich
Vielleicht solltest du dir da eine Adapterklasse erstellen, wo du die Daten in den Felder der Klasse speicherst und mit den Methoden save & load die Daten speichern und laden kannst. Dann kannst du im der Activity schön mit der Instanz der Klasse arbeiten, ohne darin so viel unübersichtliches Prefs zeugs machen zu müssen.
Zudem ist es sinvoll die Keys nach Inhalt zu benennen, da man nonst diese leicht untereinander verwecheln kann.
Außerdem hast du einmal deine KEY variablen als string und verwendest trotzdem für die Boolean einen hardcoded string, das mache auch wenig Sinn.
Wenn dann gleich richtg ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Jordi Müller

Antworten
  • Forum-Beiträge: 29

29.06.2016, 18:20:07 via Website

okay danke ich hätte noch eine Frage,
wenn ich jetzt etwas in die verschiedene Edit Texts schreibe und es speichere und dann auf laden drücke wird mir immer das gleiche angezeigt
z.B.:

Edit Text 1 : hallo
Edit Text 2: wie gehts
Edit Text 3 : gut

Wenn ich dann auf laden drücke:

Edit Text 1: hallo
Edit Text 2: hallo
Edit Text 3 :hallo

Vielen Dank für eure Hilfe.
LG :D

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.171

29.06.2016, 18:22:16 via App

Das auslesen ist ein bisschen unsauber programmiert. Am besten du macht für jedes auslesen eine eigene String variable und setzt diese dann. Kann sein dass java als String nur den Pointer übernimmt

LG Pascal //It's not a bug, it's a feature. :) ;)

Jordi Müller

Antworten

Empfohlene Artikel