【发布时间】:2018-01-30 01:09:28
【问题描述】:
所以我在另一个页面上创建了一个数据库并且它正在工作。现在我正在尝试从 SQLite 数据库中检索数据并显示在 Android 应用程序的 ListView 上。
我已经为它编写了一个代码,但显然每次我尝试查看时它都会崩溃。请指教
我想以这样的方式跑步 注册->登录->查看空列表视图->添加记录->查看已添加记录的列表视图
更新的崩溃日志:
01-29 20:42:19.971: E/AndroidRuntime(6003): FATAL EXCEPTION: main
01-29 20:42:19.971: E/AndroidRuntime(6003): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.manandhowproject/mdad.project.Medrecord}: java.lang.IllegalArgumentException: column '_id' does not exist
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.os.Handler.dispatchMessage(Handler.java:99)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.os.Looper.loop(Looper.java:137)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.ActivityThread.main(ActivityThread.java:5103)
01-29 20:42:19.971: E/AndroidRuntime(6003): at java.lang.reflect.Method.invokeNative(Native Method)
01-29 20:42:19.971: E/AndroidRuntime(6003): at java.lang.reflect.Method.invoke(Method.java:525)
01-29 20:42:19.971: E/AndroidRuntime(6003): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-29 20:42:19.971: E/AndroidRuntime(6003): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-29 20:42:19.971: E/AndroidRuntime(6003): at dalvik.system.NativeStart.main(Native Method)
01-29 20:42:19.971: E/AndroidRuntime(6003): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.widget.CursorAdapter.init(CursorAdapter.java:168)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.widget.CursorAdapter.<init>(CursorAdapter.java:145)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:91)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:104)
01-29 20:42:19.971: E/AndroidRuntime(6003): at mdad.project.Medrecord.onCreate(Medrecord.java:34)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.Activity.performCreate(Activity.java:5133)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-29 20:42:19.971: E/AndroidRuntime(6003): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
01-29 20:42:19.971: E/AndroidRuntime(6003): ... 11 more
MedRecords.java
package mdad.project;
import com.example.manandhowproject.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class Medrecord extends Activity {
SQLiteDatabase db;
ListView lvMedRec;
SimpleCursorAdapter adapter;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.medrecord);
createDatabase();
Cursor c = null;
c = db.rawQuery("select * from MedRecords",null);String[] from = new String[]{"Bodytemp","HeartRate","BMI"};
int[] to = new int[]{R.id.etBodyTemp, R.id.etHeartRate, R.id.etBMI};
adapter = new SimpleCursorAdapter(this,R.layout.medrecord,c,from,to,0);
ListView lvMedRec = (ListView)findViewById(R.id.lvMedRec);
lvMedRec.setAdapter(adapter);
Button button = (Button)findViewById(R.id.btnAdd);
button.setOnClickListener(new OnClickListener(){
public void onClick (View V){
Intent msg5 = new Intent(Medrecord.this, Addorupdate.class);
startActivity(msg5);
}
});
Button button2 = (Button)findViewById(R.id.btnUpdate);
button2.setOnClickListener(new OnClickListener(){
public void onClick (View V){
Intent msg6 = new Intent(Medrecord.this, Addorupdate.class);
startActivity(msg6);
}
});
Button button3 = (Button)findViewById(R.id.btnSignOut);
button3.setOnClickListener(new OnClickListener(){
public void onClick (View V){
Toast.makeText(getApplicationContext(), "Log Out Success ! ", Toast.LENGTH_LONG).show();
Intent msg7 = new Intent(Medrecord.this, Login.class);
startActivity(msg7);
}
});
}
protected void createDatabase(){
db = openOrCreateDatabase("MedRec",Context.MODE_PRIVATE,null);
db.execSQL("CREATE TABLE IF NOT EXISTS MedRecords(recld integer PRIMARY KEY autoincrement, Bodytemp text, HeartRate text, BMI text;");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.fourth, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
【问题讨论】:
-
请添加崩溃日志。
-
@DataDino 您好,已添加崩溃日志
标签: java android sqlite listview