Saya cukup baru dalam pengembangan aplikasi android. Di aplikasi saya, saya mencoba menambahkan uang ke dompet yang tidak berhasil. Logcat tidak menunjukkan kesalahan apa pun dalam eksekusi.

Di sini saya memposting myDbAdapter.java(database), add_amount.java dan activity_add_amount.xml.

Add_amount.java adalah sebagai berikut:

public class Add_Amount extends AppCompatActivity {
    TextView amount;
    String total;
    TextView up;
    private no.nordicsemi.android.nrftoolbox.myDbAdapter mydb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add__amount);
        up=(TextView)findViewById(R.id.textView_wallet);
        amount=(TextView)findViewById(R.id.editText_amount);
        String Amount=(String)amount.getText().toString();
        mydb = new no.nordicsemi.android.nrftoolbox.myDbAdapter(this);
        Cursor rs = mydb.getData(1);
        rs.moveToFirst();
        String wall=rs.getString(rs.getColumnIndex(no.nordicsemi.android.nrftoolbox.myDbAdapter.CONTACTS_COLUMN_WALLET));
        total=Amount+wall;

    }
    public void addamt(View v){
        boolean b=mydb.updateWallet(total,1);
        if(b==true)
            message(getApplicationContext(),"updated");
        else
            message(getApplicationContext(),"not updated");
    }
}

Fungsi updateWallet di myDbAdapter.java adalah sebagai berikut:

    public boolean updateWallet(String amount,Integer id)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("wallet",amount);
        db.update("contacts",contentValues,"id = ? ",new String[] { Integer.toString(id)});
        return true;
    }
}

Ketika saya mengklik tombol (Tambahkan jumlah) setelah memasukkan jumlah berapa pun, pesan roti panggang "diperbarui" ditampilkan. Tapi itu tidak diperbarui.

Di mana kemungkinan kesalahannya?

0
VINNY KINGER 27 November 2017, 09:58
Setiap kali Anda memperbarui dompet orang yang idnya 1
 – 
Abhishek Singh
27 November 2017, 10:01
Pikirkan tentang memperpendek kode dengan menghapus bagian-bagian yang mungkin tidak ada hubungannya dengan masalah Anda. Ini akan membuat lebih banyak orang membaca pertanyaan karena mereka tidak perlu mencari bagian kode yang penting.
 – 
Dawid Zbiński
27 November 2017, 10:01
Ya. Niat saya di sini adalah untuk menguji aplikasi untuk entri id=1. @AbhishekSingh
 – 
VINNY KINGER
27 November 2017, 11:08
1
Tentu. Memperbarui kode dengan memperpendek dan hanya menyertakan data yang berguna. Terima kasih banyak. @DawidZbiński
 – 
VINNY KINGER
27 November 2017, 11:09
Memecahkan ini belum?
 – 
IntelliJ Amiya
28 November 2017, 10:44

2 jawaban

Selama tidak ada masalah SQL (misalnya kolom/tabel tidak ditemukan yaitu pengecualian yang diajukan) maka terlepas dari apakah pembaruan terjadi benar atau tidak akan dikembalikan oleh kode yang Anda miliki saat ini.

Namun, hanya karena update tidak gagal dengan pengecualian (misalnya nama kolom/tabel tidak ditemukan), bukan berarti pembaruan telah dilakukan.

Misalnya; jika Anda memberikan nomor untuk id yang tidak ada, pembaruan tidak akan mengeluarkan pengecualian, melainkan tidak ada yang akan diperbarui karena tidak ada baris untuk diperbarui.

Sebagai update metode mengembalikan jumlah baris yang diperbarui sebagai int, Anda dapat menggunakan ini dengan mengganti :-

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

Dengan sesuatu di sepanjang baris: -

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

Melakukannya akan membagi masalah Anda menjadi dua: -

  • Jika 0 dikembalikan dan Toast adalah not updated; kemudian untuk beberapa alasan pembaruan tidak terjadi (mis. tidak ada baris dengan id yang ditentukan).

  • Jika > 0 dikembalikan dan Toast menampilkan updated; maka masalahnya kemungkinan berkaitan dengan metode apa pun yang Anda gunakan untuk menentukan bahwa tidak ada baris yang tampaknya telah diperbarui.

Mungkin Anda bisa menggunakan metode ditemukan di sini yang dapat digunakan untuk menampilkan informasi database/tabel ke Log.

0
MikeT 27 November 2017, 12:39
Roti panggang ditampilkan "diperbarui". Sekarang dari link yang disebutkan di atas, di mana perlu memasukkan kode-kode itu?? @MikeT
 – 
VINNY KINGER
27 November 2017, 14:42
Gunakan getAllRowsfromTable untuk membuat Kursor untuk metode logCursorData, gunakan keduanya sebelum dan sesudah pembaruan dalam metode updateWallet (atau di tempat lain jika perlu).
 – 
MikeT
27 November 2017, 15:46
Ketika saya memasukkan kode itu kesalahan tampilannya di dekat "public static Cursor getAllRowsfromTable" mengatakan: kelas dalam tidak dapat memiliki deklarasi statis. .
 – 
VINNY KINGER
29 November 2017, 09:45
Anda perlu membuat file Java Class baru bernama CommonSQLiteUtilities.java, lalu salin kode dari tautan ke file itu. Anda kemudian dapat menggunakan `Cursor csr = CommonSQLiteUtilities.getAllRowsFromTable(db,"contacts",true,null); diikuti oleh CommonSQLiteUtilities.LogCursorData(csr);
 – 
MikeT
29 November 2017, 12:32

Masalah

new String[] { Integer.toString(1)} . Akibatnya, baris diperbarui WHERE ID=1.

Anda harus meneruskan nilai DYNAMIC alih-alih statis 1. Anda dapat melewati email.

public boolean updateWallet(String amount,final int _id)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("wallet",amount);
        db.update("contacts",contentValues,"id = ? ",new String[] { Integer.toString(_id)});
        return true;
    }
0
IntelliJ Amiya 28 November 2017, 10:43