Java 为什么我的应用程序在游标试图从数据库获取数据时崩溃?
我试图从db中获取一个简单的图像和文本,并将它们显示在listview中,但当调试器达到该点时,它会崩溃,我想知道为什么会发生这种情况 搜查表: dbHelper:包括两种方法: 1:向数据库添加新行 2:从db中读取行:问题在这里,我想,我使用了调试器,当它要调用这个方法时,它突然崩溃了Java 为什么我的应用程序在游标试图从数据库获取数据时崩溃?,java,android,Java,Android,我试图从db中获取一个简单的图像和文本,并将它们显示在listview中,但当调试器达到该点时,它会崩溃,我想知道为什么会发生这种情况 搜查表: dbHelper:包括两种方法: 1:向数据库添加新行 2:从db中读取行:问题在这里,我想,我使用了调试器,当它要调用这个方法时,它突然崩溃了 import java.util.ArrayList; import java.util.List; import sqlitemodel.Schema.Raiding; import android.co
import java.util.ArrayList;
import java.util.List;
import sqlitemodel.Schema.Raiding;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class MyDataBaseHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "strategies.db";
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
public String CREATE_QUERY = "CREATE TABLE " + Raiding.TABLE_NAME + "("
+ Raiding._ID + " INTEGER PRIMARY KEY," + Raiding.ATTACK_NAME
+ TEXT_TYPE + COMMA_SEP + Raiding.ATTACK_TH + TEXT_TYPE + COMMA_SEP
+ Raiding.ATTACK_Type + TEXT_TYPE + COMMA_SEP
+ Raiding.ATTACK_ElixirUsage + TEXT_TYPE + COMMA_SEP
+ Raiding.ATTACK_Image + " Blob" + ")";
public MyDataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.d("db", "created");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY);
Log.d("table!", "Created!");
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
arg0.execSQL("DROP TABLE IF EXISTS " + Raiding.TABLE_NAME);
onCreate(arg0);
}
public void addRaiding(RaidingClass raidingClass) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(Raiding.ATTACK_NAME, raidingClass.name);
values.put(Raiding.ATTACK_TH, raidingClass.th);
values.put(Raiding.ATTACK_Type, raidingClass.type);
values.put(Raiding.ATTACK_ElixirUsage, raidingClass.usage);
values.put(Raiding.ATTACK_Image, raidingClass.image);
db.insert(Raiding.TABLE_NAME, null, values);
db.close();
}
public List<RaidingClass> getAllRaidingAttacks() {
List<RaidingClass> raidingAttackList = new ArrayList<RaidingClass>();
String selectQuery = "SELECT * FROM " + Raiding.TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
Log.d("count", String.valueOf(cursor.getCount()));
if (cursor.moveToFirst()) {
do {
RaidingClass raidingClass = new RaidingClass();
raidingClass.setID(cursor.getInt(0));
raidingClass.setName(cursor.getString(1));
raidingClass.setTh(cursor.getString(2));
raidingClass.setType(cursor.getString(3));
raidingClass.setUsage(cursor.getString(4));
raidingClass.setImage(cursor.getBlob(5));
raidingAttackList.add(raidingClass);
} while (cursor.moveToNext());
}
db.close();
return raidingAttackList;
}
}
mainActivity.java:
RaidingAttack:这是我试图调用getAllRaidingAttacks()方法获取相应行值的类
public class RaidingAttack extends Activity {
ArrayList<RaidingClass> raidingDetails = new ArrayList<RaidingClass>();
RaidingAdapter raidingAdapter;
MyDataBaseHelper dbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_raiding);
dbHelper.getReadableDatabase();
List<RaidingClass> raiding = dbHelper.getAllRaidingAttacks();
for (RaidingClass rd : raiding) {
raidingDetails.add(rd);
}
raidingAdapter = new RaidingAdapter(this,
R.layout.activity_list_singlerow, raidingDetails);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(raidingAdapter);
}
}
未在
RaidingAttack
public class RaidingAttack extends Activity {
ArrayList<RaidingClass> raidingDetails = new ArrayList<RaidingClass>();
RaidingAdapter raidingAdapter;
MyDataBaseHelper dbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_raiding);
//init dbHelper
dbHelper = new MyDataBaseHelper(this);
dbHelper.getReadableDatabase();
public class RaidingAttack扩展活动{
ArrayList raidingDetails=新建ArrayList();
RaidingAdapter RaidingAdapter;
MyDataBaseHelper-dbHelper;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_raiding);
//init dbHelper
dbHelper=新的MyDataBaseHelper(此);
dbHelper.getReadableDatabase();
什么是崩溃日志?现在就添加了它。您是否找到了该行上发生null异常的位置?您找到了什么。您调试dbhelper类的过程有多深?代码转储是这样的,希望我们告诉您…@t0mm13b好吧,我复制了该行中关于代码的所有其他信息?
public class MainActivity extends Activity {
Button btnattack;
MyDataBaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDataBaseHelper(this);
dbHelper.getWritableDatabase();
Bitmap image = BitmapFactory.decodeResource(getResources(),
R.drawable.barcher);
//
// // convert bitmap to byte
ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte imageInByte[] = stream.toByteArray();
dbHelper.addRaiding(new RaidingClass("barcher", "8", "R", "many",
imageInByte));
btnattack = (Button) findViewById(R.id.btnattack);
btnattack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent myIntent = new Intent(MainActivity.this,
RaidingAttack.class);
startActivity(myIntent);
}
});
}
}
public class RaidingAttack extends Activity {
ArrayList<RaidingClass> raidingDetails = new ArrayList<RaidingClass>();
RaidingAdapter raidingAdapter;
MyDataBaseHelper dbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_raiding);
dbHelper.getReadableDatabase();
List<RaidingClass> raiding = dbHelper.getAllRaidingAttacks();
for (RaidingClass rd : raiding) {
raidingDetails.add(rd);
}
raidingAdapter = new RaidingAdapter(this,
R.layout.activity_list_singlerow, raidingDetails);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(raidingAdapter);
}
}
List<RaidingClass> raiding = dbHelper.getAllRaidingAttacks();
10-20 05:11:29.102: E/AndroidRuntime(14511): FATAL EXCEPTION: main
10-20 05:11:29.102: E/AndroidRuntime(14511): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.masoudseraj.clashofclansstrategies/com.masoudseraj.clashofclansstrategies.RaidingAttack}: java.lang.NullPointerException
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.ActivityThread.access$600(ActivityThread.java:123)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.os.Handler.dispatchMessage(Handler.java:99)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.os.Looper.loop(Looper.java:137)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.ActivityThread.main(ActivityThread.java:4424)
10-20 05:11:29.102: E/AndroidRuntime(14511): at java.lang.reflect.Method.invokeNative(Native Method)
10-20 05:11:29.102: E/AndroidRuntime(14511): at java.lang.reflect.Method.invoke(Method.java:511)
10-20 05:11:29.102: E/AndroidRuntime(14511): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-20 05:11:29.102: E/AndroidRuntime(14511): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-20 05:11:29.102: E/AndroidRuntime(14511): at dalvik.system.NativeStart.main(Native Method)
10-20 05:11:29.102: E/AndroidRuntime(14511): Caused by: java.lang.NullPointerException
10-20 05:11:29.102: E/AndroidRuntime(14511): at com.masoudseraj.clashofclansstrategies.RaidingAttack.onCreate(RaidingAttack.java:24)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.Activity.performCreate(Activity.java:4465)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
10-20 05:11:29.102: E/AndroidRuntime(14511): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
10-20 05:11:29.102: E/AndroidRuntime(14511): ... 11 more
public class RaidingAttack extends Activity {
ArrayList<RaidingClass> raidingDetails = new ArrayList<RaidingClass>();
RaidingAdapter raidingAdapter;
MyDataBaseHelper dbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_raiding);
//init dbHelper
dbHelper = new MyDataBaseHelper(this);
dbHelper.getReadableDatabase();