【发布时间】:2017-08-24 05:44:48
【问题描述】:
我有一个包含两个表的 SQLite 数据库:主题表和词汇表。我想在单击图片按钮时显示词汇图像,但应用程序崩溃。
Choice.java
public class Choice extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.choice);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.pictureButton: {
Intent intent = new Intent(Choice.this, Pictureandtext.class);
startActivity(intent);
break;
}
case R.id.textButton: {
break;
}
}
}
}
我的意图来自
this.listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Intent intent = new Intent(Smode.this, Choice.class);
intent.putExtra("SelectedTopicId", id);
startActivity(intent);
}
});
这是我在 DatabaseAccess.java
中的getImage() 方法
public byte[] getImage(int i) {
//byte[] data = null;
String selectImage = "SELECT VocabImage FROM Vocab WHERE VocabTopic =" + i;
Cursor cursor = database.rawQuery(selectImage, null);
if (cursor == null) {
cursor.moveToFirst();
do {
cursor.getBlob(0);
} while (cursor.moveToNext());
}
cursor.close();
return null;
}
Pictureandtext.java
public class Pictureandtext extends AppCompatActivity {
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
protected Cursor cursor;
private ImageView imageView;
private TextView textView;
private int topicId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pictureandtext);
imageView = (ImageView)findViewById(R.id.imageView);
textView = (TextView)findViewById(R.id.textView);
topicId = getIntent().getIntExtra("SelectedTopicId", 0);
databaseAccess.open();
byte[] data = databaseAccess.getImage(topicId);
Bitmap image = toBitmap(data);
imageView.setImageBitmap(image);
/*String name = databaseAccess.getVocabName(topicId);
textView.setText(name);*/
databaseAccess.close();
}
public static Bitmap toBitmap(byte[] image){
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
}
已编辑!! 我编辑了一些编码,但我仍然遇到一些错误。非常感谢您的帮助。谢谢。
致命异常:主要 进程:com.example.user.displayvocab,PID:29339 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.user.displayvocab/com.example.user.displayvocab.Pictureandtext}:java.lang.NullPointerException:尝试获取空数组的长度 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985) 在 android.app.ActivityThread.-wrap14(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6692) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 引起:java.lang.NullPointerException:尝试获取空数组的长度 在 com.example.user.displayvocab.Pictureandtext.toBitmap(Pictureandtext.java:47) 在 com.example.user.displayvocab.Pictureandtext.onCreate(Pictureandtext.java:38) 在 android.app.Activity.performCreate(Activity.java:6912) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985) 在 android.app.ActivityThread.-wrap14(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6692) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
【问题讨论】:
-
在getImage()方法中加入这段代码-> if (cursur == null) return null;
-
你能告诉我我应该如何添加它吗?谢谢
-
在 rawQuery 之后添加
-
我已添加它(请参阅更新的编码),但应用程序仍然崩溃,并显示“尝试获取空数组的长度”。知道如何解决吗?
-
查看编码删除最后返回 null 并添加您的输出
标签: java android nullpointerexception onclick bitmapfactory