1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. IIIGeorgeIII, 11.01.2018 um 13:28 Uhr #1
    IIIGeorgeIII

    IIIGeorgeIII Threadstarter Neuer Benutzer

    Guten Tag,

    Ich habe ein Problem mit meinem Cursor, soweit klappt alles aber sobald ich was aus der Database entferne, bekomme ich folgenden Fehler:

    android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

    hat vielleicht einer eine Idee ?

    Code:
    public class DisplayContact extends ActionBarActivity {
        int from_Where_I_Am_Coming = 0;
        private DBHelper dbmanager ;
    
        TextView name ;
        TextView phone;
        TextView email;
        TextView street;
        TextView place;
        int id_To_Update = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display_contact);
    
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbardisplaypkw);
            setSupportActionBar(toolbar);
    
    
            name = (TextView) findViewById(R.id.editTextName);
            phone = (TextView) findViewById(R.id.editTextPhone);
            email = (TextView) findViewById(R.id.editTextStreet);
            street = (TextView) findViewById(R.id.editTextEmail);
            place = (TextView) findViewById(R.id.editTextCity);
    
            dbmanager = new DBHelper(this);
    
            Bundle extras = getIntent().getExtras();
            if(extras != null   ) {
                int Value = extras.getInt("_id");
    
                if(Value>0) {
                    //means this is the view part not the add contact part.
                    Cursor rs = dbmanager.getData(Value);
                    id_To_Update = Value;
    
                        rs.moveToFirst();
    
                        String nam = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_NAME));
                        String phon = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_PHONE));
                        String emai = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_EMAIL));
                        String stree = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STREET));
                        String plac = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_CITY));
    
                        if (!rs.isClosed()) {
                            rs.close();
                        }
    
                        Button b = (Button) findViewById(R.id.button1);
                        b.setVisibility(View.INVISIBLE);
    
                        name.setText((CharSequence) nam);
                        name.setFocusable(false);
                        name.setClickable(false);
    
                        phone.setText((CharSequence) phon);
                        phone.setFocusable(false);
                        phone.setClickable(false);
    
                        email.setText((CharSequence) emai);
                        email.setFocusable(false);
                        email.setClickable(false);
    
                        street.setText((CharSequence) stree);
                        street.setFocusable(false);
                        street.setClickable(false);
    
                        place.setText((CharSequence) plac);
                        place.setFocusable(false);
                        place.setClickable(false);
                    }
    
                }
            }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            Bundle extras = getIntent().getExtras();
    
            if(extras !=null) {
                int Value = extras.getInt("_id");
                if(Value>0){
                    getMenuInflater().inflate(R.menu.display_contact, menu);
                } else{
                    getMenuInflater().inflate(R.menu.menu, menu);
                }
            }
            return true;
        }
    
        public boolean onOptionsItemSelected(MenuItem item) {
            super.onOptionsItemSelected(item);
            switch(item.getItemId()) {
                case R.id.Edit_Contact:
                    Button b = (Button)findViewById(R.id.button1);
                    b.setVisibility(View.VISIBLE);
                    name.setEnabled(true);
                    name.setFocusableInTouchMode(true);
                    name.setClickable(true);
    
                    phone.setEnabled(true);
                    phone.setFocusableInTouchMode(true);
                    phone.setClickable(true);
    
                    email.setEnabled(true);
                    email.setFocusableInTouchMode(true);
                    email.setClickable(true);
    
                    street.setEnabled(true);
                    street.setFocusableInTouchMode(true);
                    street.setClickable(true);
    
                    place.setEnabled(true);
                    place.setFocusableInTouchMode(true);
                    place.setClickable(true);
    
                    return true;
                case R.id.Delete_Contact:
    
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setMessage(R.string.deleteContact)
                            .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    dbmanager.deleteContact(id_To_Update);
                                    Toast.makeText(getApplicationContext(), "Deleted Successfully",
                                            Toast.LENGTH_SHORT).show();
                                    Intent intent = new Intent(getApplicationContext(),MainActivityEigenePkw.class);
                                    startActivity(intent);
                                }
                            })
                            .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    // User cancelled the dialog
                                }
                            });
    
                    AlertDialog d = builder.create();
                    d.setTitle("Are you sure");
                    d.show();
    
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
    
            }
        }
    
        public void run(View view) {
            Bundle extras = getIntent().getExtras();
            if(extras !=null) {
                int Value = extras.getInt("_id");
                if(Value>0){
                    if(dbmanager.updateContact(id_To_Update,name.getText().toString(),
                            phone.getText().toString(), email.getText().toString(),
                            street.getText().toString(), place.getText().toString())){
                        Toast.makeText(getApplicationContext(), "Updated", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(getApplicationContext(),MainActivityEigenePkw.class);
                        startActivity(intent);
                    } else{
                        Toast.makeText(getApplicationContext(), "not Updated", Toast.LENGTH_SHORT).show();
                    }
                } else{
                    if(dbmanager.insertContact(name.getText().toString(), phone.getText().toString(),
                            email.getText().toString(), street.getText().toString(),
                            place.getText().toString())){
                        Toast.makeText(getApplicationContext(), "done",
                                Toast.LENGTH_SHORT).show();
                    } else{
                        Toast.makeText(getApplicationContext(), "not done",
                                Toast.LENGTH_SHORT).show();
                    }
                    Intent intent = new Intent(getApplicationContext(),MainActivityEigenePkw.class);
                    startActivity(intent);
                }
            }
        }
    }
     
  2. deek

    deek Android-Experte

    Du gehst einfach munter davon aus, dass du von deinem Cursor lesen kannst nach moveToFirst(). Wenn du aber die Daten gelöscht hast in der DB dann ist halt nichts da. dann wird rs.getString failen.
    Du solltest um deine getString noch ein if(rs.isAfterLast()) machen.
    Auf den ersten Blick
     
    swa00 und IIIGeorgeIII gefällt das.
  3. IIIGeorgeIII, 11.01.2018 um 17:17 Uhr #3
    IIIGeorgeIII

    IIIGeorgeIII Threadstarter Neuer Benutzer

    @deek
    Ja stimmt :) deshalb komme ich nicht weiter wenn er Daten gelöscht hat,
    -- Dieser Beitrag wurde automatisch mit dem folgenden Beitrag zusammengeführt --
    @deek

    Kannst du vielleicht ein Beispiel in Form eines Codes zeigen was du genau meinst? :)
     
  4. swa00

    swa00 Moderator Mitarbeiter

    a) Dein komplettes FehlerManagement an diesem Punkt fehlt. (Try/Catch ?)
    b) Das Ganze direkt im OnCreate zu machen ist schon recht mutig, an der Stelle gibt man
    der UI erst mal Luft . Tipp : Zeitverzögert (Thread) arbeiten.

    c) Wir können schlecht sagen, was dein dbmanager zurückgibt. Ich vermute :
    Code:
    Cursor rs = dbmanager.getData(Value);
    if ( rs != null) .....
    
     
    Zuletzt bearbeitet: 12.01.2018 um 07:11 Uhr
  5. IIIGeorgeIII, 12.01.2018 um 07:37 Uhr #5
    IIIGeorgeIII

    IIIGeorgeIII Threadstarter Neuer Benutzer

    Ich versuche da gerade bisschen Ordnung reinzubringen :) Aber ich habe festgestellt sobald ich die Zeile oberhalb löschen in der DB dann rutscht die untere nicht hoch und somit passt es dann in der ListView nicht überein
     
  6. swa00

    swa00 Moderator Mitarbeiter

    Na ja , Dein Ansatz ansich stimmt auch nicht .
    Ich musste X Mal drüberlesen , um überhaupt zu erkennen , was das Ding eigentlich machen soll :)

    Aus welchem "dubiosen" Tutorial hast du das "kopiert" ?? :)
     
  7. IIIGeorgeIII, 12.01.2018 um 07:49 Uhr #7
    IIIGeorgeIII

    IIIGeorgeIII Threadstarter Neuer Benutzer

    Ja ich merke das auch langsam das es nicht so Funktioniert wie ich mir das vorstelle.

    Ich möchte gerne meiner App ermöglichen das der Benutzer seine Eigene Fahrzeuge in dir DB einfügen kann.
     
  8. swa00

    swa00 Moderator Mitarbeiter

    ok, bevor du an der UI rumschraubst , solltest du erst mal deinen dbmanager auf Vordermann bringen.
    (den kennen wir nicht)

    Bezogen auf dein "Aufräumen" scheint der nicht das zu sortieren , was du brauchst , und bei deinem Vorgehen
    benötigst du die richtige Reihenfolge , abgestimmt auf die Tabelleneinträge - sonst wird das eh nix.

    Dein Code ist zu statisch und berücksichtigt nicht das was da ist ( siehe auch 0 Einträge in der DB)
    Und wie schon oben erwähnt - Das komplette FehlerManagment fehlt, so wirst du nie auf einen
    grünen Zweig kommen.
     
  9. IIIGeorgeIII, 12.01.2018 um 08:37 Uhr #9
    IIIGeorgeIII

    IIIGeorgeIII Threadstarter Neuer Benutzer

    Okay Danke schon mal ;-)
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Fehler bei der Kompilierung Android App Entwicklung 18.12.2017
[OFFEN] Fehler beim Projekt importieren Android App Entwicklung 03.10.2017
[GESCHLOSSEN] Random ListItem ausgeben funktioniert nicht mehr Android App Entwicklung 13.08.2017
[OFFEN] Bild per Intent an ListView übergeben und anzeigen Android App Entwicklung 13.08.2017
[ERLEDIGT] Android Studio Erste App-Programmierung Android App Entwicklung 02.08.2017
[NON-DEV] ADB -Nach Tutorial zur Speichererweiterung - Installation von Apps schlägt fehl Android App Entwicklung 24.06.2017
[ERLEDIGT] Hilfe bei Fehler in Quellcode benötigt Android App Entwicklung 23.06.2017
[GESCHLOSSEN] APK Zigalign Fehler Playstore Android App Entwicklung 13.06.2017
[GELÖST] Nach AS Update Fehler Error running app: Default Activity not found Android App Entwicklung 16.05.2017
[ERLEDIGT] Listview mit Datenbank über Custom ArrayList verbinden Android App Entwicklung 22.04.2017
Du betrachtest das Thema "ListView: fehler android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0" im Forum "Android App Entwicklung",