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

  • 8 Antworten
  • Letztes Antwortdatum
I

IIIGeorgeIII

Neues Mitglied
1
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);
            }
        }
    }
}
 
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
 
  • Danke
Reaktionen: swa00 und IIIGeorgeIII
@deek
Ja stimmt :) deshalb komme ich nicht weiter wenn er Daten gelöscht hat,
[doublepost=1515687430,1515680709][/doublepost]@deek

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

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:
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
 
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" ?? :)
 
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. [emoji4]
 
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.
 
Okay Danke schon mal ;-)
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.217
swa00
swa00
AnnaBauer21
Antworten
6
Aufrufe
190
AnnaBauer21
AnnaBauer21
D
Antworten
9
Aufrufe
2.052
jogimuc
J
Zurück
Oben Unten