Autore Topic: Database error dopo aver cancellato un elemento creato  (Letto 422 volte)

Offline Jekan

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Umi Super
  • Sistema operativo:
    Windows 7
Database error dopo aver cancellato un elemento creato
« il: 25 Maggio 2017, 16:26:58 CEST »
0
Salve a tutti, come da titolo ho questo problema se creo tre oggetti nel db e cancello tipo il secondo il terzo oggetto va sulla seconda posizione e quando clicco l'app da errore, ho creato un mini video per fa capire meglio l'errore spero qualcuo mi sappia aiutare.
https://drive.google.com/file/d/0B7biQzzI_GEpREdEelJJWE1EXzg/view

db
Codice (Java): [Seleziona]
package jekan.myapplication.monster_sheet_package;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Created by Jekan on 20/04/2017.
 */


public class DBHelper extends SQLiteOpenHelper {

    public static final String dbmonster_name = "dbmonster_name.db";
    public static final String CONTACTS_TABLE_NAME = "contacts";
    public static final String CONTACTS_COLUMN_ID = "id";

    public static final String CONTACTS_COLUMN_NAME = "name";
    public static final String CONTACTS_COLUMN_REMARK = "remark";
    public static final String mynotes_monster = "mynotes_monster";



    private HashMap hmmonster;

    public DBHelper(Context context) {
        super(context, dbmonster_name, null, 11);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(
                "create table contacts " +
                        "(id integer primary key, name text,remark text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS contacts");
        onCreate(db);
    }


    public boolean insertContact(String name, String remark
    ) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", name);
        contentValues.put("remark", remark);


        db.insert("contacts", null, contentValues);
        return true;
    }

    public Cursor getData(int id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res = db.rawQuery("select * from contacts where id=" + id + "", null);
        return res;
    }

    public int numberOfRows() {
        SQLiteDatabase db = this.getReadableDatabase();
        int numRows = (int) DatabaseUtils.queryNumEntries(db, CONTACTS_TABLE_NAME);
        return numRows;
    }


    public Integer deleteContact(Integer id) {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete("contacts",
                "id = ? ",
                new String[]{Integer.toString(id)});
    }

    public ArrayList<String> getAllCotacts() {
        ArrayList<String> array_list = new ArrayList<String>();

        //hp = new HashMap();
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res = db.rawQuery("select * from contacts", null);
        res.moveToFirst();

        while (res.isAfterLast() == false) {
            array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_NAME)));
            res.moveToNext();
        }
        return array_list;
    }


    public boolean updateContact(int id, String name, String remark) {
        {
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues contentValues = new ContentValues();

            contentValues.put("name", name);
            contentValues.put("remark", remark);

            db.update("contacts", contentValues, "id = ? ", new String[]{Integer.toString(id)});
            return true;
        }
    }
}

DisplayNotes
Codice (Java): [Seleziona]
  package jekan.myapplication.monster_sheet_package;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import jekan.myapplication.R;
import jekan.myapplication.Theme.BaseActivity;
import jekan.myapplication.shop.MyNotes_shop;

import static jekan.myapplication.R.id.txtcontent_monster;
import static jekan.myapplication.R.id.txtname_monster_name;

public class DisplayNote_monster extends BaseActivity {

    int from_Where_I_Am_Coming = 0;
    private DBHelper mydb ;

    TextView name;
    TextView content;

    int id_To_Update = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewnotepad_monster);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent MyNotes = new Intent(getApplicationContext(), MyNotes_monster.class);
                startActivity(MyNotes);
            }
        });

        name = (TextView) findViewById(R.id.txtname_monster);
        content = (TextView) findViewById(txtcontent_monster);


        mydb = 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 = mydb.getData(Value);
                id_To_Update = Value;
                rs.moveToFirst();

                String nam = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_NAME));
                String contents = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_REMARK));

                if (!rs.isClosed())  {
                    rs.close();
                }
                Button b = (Button)findViewById(R.id.button_save_note_moster);
                b.setVisibility(View.INVISIBLE);

                name.setText((CharSequence)nam);
                name.setFocusable(false);
                name.setClickable(false);

                content.setText((CharSequence)contents);
                content.setFocusable(false);
                content.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_main, 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.button_save_note_moster);
                b.setVisibility(View.VISIBLE);

                item.setVisible(true);


                name.setEnabled(true);
                name.setFocusableInTouchMode(true);
                name.setClickable(true);

                content.setEnabled(true);
                content.setFocusableInTouchMode(true);
                content.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) {
                                mydb.deleteContact(id_To_Update);
                                Toast.makeText(getApplicationContext(), "Deleted Successfully",
                                        Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(getApplicationContext(),MyNotes_monster.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(mydb.updateContact(
                        id_To_Update,
                        name.getText().toString(),
                        content.getText().toString())

                        ){
                    Toast.makeText(getApplicationContext(), "Updated", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(getApplicationContext(),MyNotes_monster.class);
                    startActivity(intent);
                } else{
                    Toast.makeText(getApplicationContext(), "not Updated", Toast.LENGTH_SHORT).show();
                }
            } else{
                if(mydb.insertContact(
                        name.getText().toString(),
                        content.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(),MyNotes_monster.class);
                startActivity(intent);
            }
        }
    }
    @Override
    public void onBackPressed() {
        Intent intent = new Intent(getApplicationContext(), MyNotes_monster.class);
        startActivity(intent);
    }
}

Mynote
Codice (Java): [Seleziona]
package jekan.myapplication.monster_sheet_package;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

import jekan.myapplication.Main_tools;
import jekan.myapplication.R;
import jekan.myapplication.Theme.BaseActivity;

public class MyNotes_monster extends BaseActivity {

    public final static String EXTRA_MESSAGE = "MESSAGE";
    private ListView obj;
    DBHelper mydb;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notedisplay_monster);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent MyNotes = new Intent(getApplicationContext(), Main_tools.class);
                startActivity(MyNotes);
            }
        });


        mydb = new DBHelper(this);
        ArrayList array_list = mydb.getAllCotacts();
        ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1, array_list);

        obj = (ListView)findViewById(R.id.listView1);
        obj.setAdapter(arrayAdapter);
        obj.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
                // TODO Auto-generated method stub
                int id_To_Search = arg2 + 1;

                Bundle dataBundle = new Bundle();
                dataBundle.putInt("id", id_To_Search);

                Intent intent = new Intent(getApplicationContext(),DisplayNote_monster.class);

                intent.putExtras(dataBundle);
                startActivity(intent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        super.onOptionsItemSelected(item);

        switch(item.getItemId()) {
            case R.id.add:Bundle dataBundle = new Bundle();
                dataBundle.putInt("id", 0);

                Intent intent = new Intent(getApplicationContext(),DisplayNote_monster.class);
                intent.putExtras(dataBundle);

                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    @Override
    public void onBackPressed() {
        Intent intent = new Intent(getApplicationContext(), Main_tools.class);
        startActivity(intent);
    }
}


erore
Codice (Java): [Seleziona]
   05-24 23:03:18.187 8210-8210/jekan.myapplication.d20pro E/UncaughtException: java.lang.RuntimeException: Unable to start activity ComponentInfo{jekan.myapplication.d20pro/jekan.myapplication.monster_sheet_package.DisplayNote_monster}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2724)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
                                                                                 at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                                 at android.os.Looper.loop(Looper.java:203)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6247)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
                                                                              Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                                                                                 at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
                                                                                 at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:151)
                                                                                 at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:65)
                                                                                 at jekan.myapplication.monster_sheet_package.DisplayNote_monster.onCreate(DisplayNote_monster.java:113)
                                                                                 at android.app.Activity.performCreate(Activity.java:6666)
                                                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
                                                                                 at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                                 at android.os.Looper.loop(Looper.java:203)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6247)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
05-24 23:03:18.215 291-714/? E/MAL-RDS:  (  rds_ru_3gpp_status_ind, 1820) [RDS-E][RU][EVENT_RU_DM_3GPP_STATUS_IND] Invalid u43gpp_status:0x8 sim:1
05-24 23:03:18.452 8210-8210/jekan.myapplication.d20pro E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: jekan.myapplication.d20pro, PID: 8210
                                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{jekan.myapplication.d20pro/jekan.myapplication.monster_sheet_package.DisplayNote_monster}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2724)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
                                                                              at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                              at android.os.Looper.loop(Looper.java:203)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:6247)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
                                                                           Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                                                                              at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
                                                                              at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:151)
                                                                              at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:65)
                                                                              at jekan.myapplication.monster_sheet_package.DisplayNote_monster.onCreate(DisplayNote_monster.java:113)
                                                                              at android.app.Activity.performCreate(Activity.java:6666)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
                                                                              at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                              at android.os.Looper.loop(Looper.java:203)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:6247)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Database error dopo aver cancellato un elemento creato
« Risposta #1 il: 26 Maggio 2017, 11:50:13 CEST »
0
L'errore dice che stai cercando di leggere da un cursore senza dati.

In DisplayNote_monster.onCreate() al posto di

Codice (Java): [Seleziona]
                rs.moveToFirst();

                String nam = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_NAME));
                String contents = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_REMARK));

metti

Codice (Java): [Seleziona]
                if (rs.moveToFirst()) {
                    String nam = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_NAME));
                    String contents = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_REMARK));
                }
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Jekan

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Umi Super
  • Sistema operativo:
    Windows 7
Re:Database error dopo aver cancellato un elemento creato
« Risposta #2 il: 26 Maggio 2017, 13:34:14 CEST »
0
Ciao ti ringrazio per la risposta ho fatto come hai detto ho aggiunto quello poi ho aggiunto
Codice (Java): [Seleziona]
String nam = null;
                String contents = null;
                String contents_nn = null;
                String contents_string_size = null;
                String contents_string_hit_dice = null;
                String contents_string_initiative = null;
                String contents_string_speed = null;
                String contents_string_armor_class = null;
                String contents_string_base_attack_g = null;
                String contents_string_attack = null;
                String contents_string_full_attack = null;
                String contents_string_space_reach = null;
                String contents_string_special_attack = null;
                String contents_string_special_qualities = null;
                String contents_string_save = null;
                String contents_string_abilities = null;
                String contents_string_skills = null;
                String contents_string_feats = null;
                String contents_string_environment = null;
                String contents_string_organization = null;
                String contents_string_challenge_rating = null;
                String contents_string_treasure = null;
                String contents_string_alignment = null;
                String contents_string_advancement = null;
                String contents_string_level_adjustment = null;

per far funzionare questo che mi dava l'errore
Codice (Java): [Seleziona]
 name.setText((CharSequence) nam);
                name.setFocusable(false);
                name.setClickable(false);

                content.setText((CharSequence) contents);
                content.setFocusable(false);
                content.setClickable(false);

                content_name.setText((CharSequence) contents_nn);
                content_name.setFocusable(false);
                content_name.setClickable(false);

                content_size.setText((CharSequence) contents_string_size);
                content_size.setFocusable(false);
                content_size.setClickable(false);

                content_hit_dice.setText((CharSequence) contents_string_hit_dice);
                content_hit_dice.setFocusable(false);
                content_hit_dice.setClickable(false);

                content_initiative.setText((CharSequence) contents_string_initiative);
                content_initiative.setFocusable(false);
                content_initiative.setClickable(false);

                content_speed.setText((CharSequence) contents_string_speed);
                content_speed.setFocusable(false);
                content_speed.setClickable(false);

                content_armor_class.setText((CharSequence) contents_string_armor_class);
                content_armor_class.setFocusable(false);
                content_armor_class.setClickable(false);

                content_base_attack_g.setText((CharSequence) contents_string_base_attack_g);
                content_base_attack_g.setFocusable(false);
                content_base_attack_g.setClickable(false);

                content_attack.setText((CharSequence) contents_string_attack);
                content_attack.setFocusable(false);
                content_attack.setClickable(false);

                content_full_attack.setText((CharSequence) contents_string_full_attack);
                content_full_attack.setFocusable(false);
                content_full_attack.setClickable(false);

                content_space_reach.setText((CharSequence) contents_string_space_reach);
                content_space_reach.setFocusable(false);
                content_space_reach.setClickable(false);

                content_special_attack.setText((CharSequence) contents_string_special_attack);
                content_special_attack.setFocusable(false);
                content_special_attack.setClickable(false);

                content_special_qualities.setText((CharSequence) contents_string_special_qualities);
                content_special_qualities.setFocusable(false);
                content_special_qualities.setClickable(false);

                content_save.setText((CharSequence) contents_string_save);
                content_save.setFocusable(false);
                content_save.setClickable(false);

                content_abilities.setText((CharSequence) contents_string_abilities);
                content_abilities.setFocusable(false);
                content_abilities.setClickable(false);

                content_skills.setText((CharSequence) contents_string_skills);
                content_skills.setFocusable(false);
                content_skills.setClickable(false);

                content_feats.setText((CharSequence) contents_string_feats);
                content_feats.setFocusable(false);
                content_feats.setClickable(false);

                content_environment.setText((CharSequence) contents_string_environment);
                content_environment.setFocusable(false);
                content_environment.setClickable(false);

                content_organization.setText((CharSequence) contents_string_organization);
                content_organization.setFocusable(false);
                content_organization.setClickable(false);

                content_challenge_rating.setText((CharSequence) contents_string_challenge_rating);
                content_challenge_rating.setFocusable(false);
                content_challenge_rating.setClickable(false);

                content_treasure.setText((CharSequence) contents_string_treasure);
                content_treasure.setFocusable(false);
                content_treasure.setClickable(false);

                content_alignment.setText((CharSequence) contents_string_alignment);
                content_alignment.setFocusable(false);
                content_alignment.setClickable(false);

                content_advancement.setText((CharSequence) contents_string_advancement);
                content_advancement.setFocusable(false);
                content_advancement.setClickable(false);

                content_level_adjustment.setText((CharSequence) contents_string_level_adjustment);
                content_level_adjustment.setFocusable(false);
                content_level_adjustment.setClickable(false);

Ma ora succede creo tre oggetti cancello il secondo il terzo va sul secondo posto clicco e mi da tutti i campi vuoti, e se aggiungo un terzo oggetto di nuovo mi da quello che avevo scritto nel terzo :'( :'( :'( sono nuovo della programazzione mi sai dire quale problema ora ho??.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Database error dopo aver cancellato un elemento creato
« Risposta #3 il: 26 Maggio 2017, 14:32:37 CEST »
0

Perdona se non me ne sono accorto prima, ma nel tuo codice c'è un grosso problema di progettazione: confondi la posizione all'interno dell'arraylist con l'ID del record.

Considera che se hai tre record, avranno come id 1,2,3 e posizione 0,1,2.

Se cancelli il record due, ti ritrovi con gli id 1,3 e posizioni 0,1

Non puoi derivare dalla posizione l'id del record, come fai tu con questo codice:

Codice (Java): [Seleziona]
int id_To_Search = arg2 + 1;
Per risolvere hai due strade: o ti porti dietro in qualche modo l'ID del record nell'arraylist che passi all'adapter, oppure ragioni sempre e solo per posizione.

La seconda soluzione è più semplice ma ti porterà ad enormi grattacapi se, ad esempio, decidi di cambiare ordinamento della lista.

Ad ogni modo per caricare un elemento in base alla posizione cambia la logica di getData: da così

Codice (Java): [Seleziona]
    public Cursor getData(int id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res = db.rawQuery("select * from contacts where id=" + id + "", null);
        return res;
    }

a così
Codice (Java): [Seleziona]
        public Cursor getData(int pos) {
                SQLiteDatabase db = this.getReadableDatabase();
                Cursor res = db.rawQuery("select * from contacts", null);
                if (res.moveToPosition(pos)) {
                        return res;
                } else {
                        res.close();
                        res = null;
                }
                return res;
        }

e poi devi cambiare anche

Codice (Java): [Seleziona]
int id_To_Search = arg2 + 1;
in

Codice (Java): [Seleziona]
int id_To_Search = arg2;

Nota 1: getData restituisce null se la posizione non è raggiungibile.
Nota 2: Devi modificare allo stesso modo anche i metodi di aggiornamento e cancellazione.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Jekan

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Umi Super
  • Sistema operativo:
    Windows 7
Re:Database error dopo aver cancellato un elemento creato
« Risposta #4 il: 26 Maggio 2017, 16:41:15 CEST »
0
Ohmnibus ti ringrazio moltissimo ma non ci sono riuscito ci rinuncio grazie mille lo stesso. :-) :-) :-)

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Database error dopo aver cancellato un elemento creato
« Risposta #5 il: 26 Maggio 2017, 18:00:29 CEST »
0
Ohmnibus ti ringrazio moltissimo ma non ci sono riuscito ci rinuncio grazie mille lo stesso. :-) :-) :-)

Che peccato :/
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.