我一直在研究Head First Android的SQLite,我试图利用它,但我得到一个例外作为我的答案。 数据库创建 `
package com.example.motorhead_luffy.tv;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by MOTORHEAD_LUFFY on 10-06-2017.
*/
class Anime extends SQLiteOpenHelper {
Anime(Context context)
{super(context,"ANIME",null,1);
}
@Override
public void onCreate(SQLiteDatabase database)
{
database.execSQL("CREATE TABLE ANIME (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "NAME TEXT, "
+ "DESCRIPTION TEXT, "
+ "IMAGE INTEGER);");
insertmore(database,"Naruto","A anime about ninjas",R.drawable.narut);
insertmore(database,"One Piece","A anime about pirates",R.drawable.one);
insertmore(database,"Death Note","A anime about shinigamis",R.drawable.deathnote);
}
@Override
public void onUpgrade(SQLiteDatabase database, int n,int o)
{
if(o<1)
{
database.execSQL("CREATE TABLE ANIME (_ID INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "NAME TEXT, "
+ "DESCRIPTION TEXT, "
+ "IMAGE INTEGER);");
insertmore(database,"Naruto","A anime about ninjas",R.drawable.narut);
insertmore(database,"One Piece","A anime about pirates",R.drawable.one);
insertmore(database,"Death Note","A anime about shinigamis",R.drawable.deathnote);
}
else if(o<3)
{
database.execSQL("ALTER TABLE ANIME ADD COLUMN FAVOURITE NUMERIC;");
}
}
private static void insertmore(SQLiteDatabase database,String name,String desc,int id)
{
ContentValues contentValues = new ContentValues();
contentValues.put("NAME",name);
contentValues.put("DESCRIPTION",desc);
contentValues.put("IMAGE",id);
database.insert("ANIME",null,contentValues);
}
}
我在哪里使用
package com.example.motorhead_luffy.tv;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class SecondActivity extends ListActivity{
private SQLiteDatabase database;
private Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView listView = getListView();
try
{
SQLiteOpenHelper anime = new Anime(this);
database = anime.getReadableDatabase();
cursor = database.query("ANIME",
new String[]{"_id","NAME"},
null,null,null,null,null);
CursorAdapter listAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor,
new String[]{"NAME"},
new int[]{android.R.id.text1},
0);
listView.setAdapter(listAdapter);
}
catch (Exception e)
{
Toast toast = Toast.makeText(this,"UNAVAILABLE",Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
public void onDestroy()
{
super.onDestroy();
cursor.close();
database.close();
}
@Override
public void onListItemClick(ListView listView, View view,int pos, long id)
{
Intent intent = new Intent(SecondActivity.this, NextActivity.class);
intent.putExtra("id",(int)id);
startActivity(intent);
}
}
我得到的输出是UNAVAILABLE(用catch编写),有人可以纠正吗?
这是logcat(printstacktrace)的输出
06-22 15:45:39.064 576-576/com.example.motorhead_luffy.tv W/System.err: java.lang.IllegalArgumentException: column '_id' does not exist
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err: at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err: at android.widget.CursorAdapter.init(CursorAdapter.java:172)
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err: at android.widget.CursorAdapter.<init>(CursorAdapter.java:149)
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err: at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:91)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err: at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:104)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err: at com.example.motorhead_luffy.tv.SecondActivity.onCreate(SecondActivity.java:31)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err: at android.app.Activity.performCreate(Activity.java:5248)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:139)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err: at android.os.Looper.loop(Looper.java:136)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5086)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
06-22 15:45:39.074 576-576/com.example.motorhead_luffy.tv W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
06-22 15:45:39.074 576-576/com.example.motorhead_luffy.tv W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-22 15:45:39.075 576-576/com.example.motorhead_luffy.tv W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-22 15:45:39.075 576-576/com.example.motorhead_luffy.tv W/System.err: at dalvik.system.NativeStart.main(Native Method)
该应用程序在Android 4.4.4 kitkat(API-19)上出现故障,但在5.1(API-21)上正常工作。两者都是不同的设备。
答案 0 :(得分:0)
列'_id'不存在 检查ID列是否正确显示。 尝试通过调试调试代码来调试代码,并查看异常的确切位置。