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?
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.
getAllRowsfromTable
untuk membuat Kursor untuk metode logCursorData
, gunakan keduanya sebelum dan sesudah pembaruan dalam metode updateWallet
(atau di tempat lain jika perlu).
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);
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;
}