【问题标题】:Android : Attempt to get length of null array [duplicate]Android:尝试获取空数组的长度[重复]
【发布时间】: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


【解决方案1】:

致命异常:主进程:com.example.user.displayvocab,PID: 24087 java.lang.IllegalStateException:无法执行方法 android:onClick 在

问题

   case R.id.pictureButton: {
    setContentView(R.layout.pictureandtext); // Remove this line

............

 case R.id.textButton: {
            setContentView(R.layout.menu); // Remove this line
            break;
        }

setContentView->将活动内容设置为显式视图。这 视图直接放入活动的视图层次结构中。

为什么要多次致电setContentView?删除这一行。你可以在那里显示DIALOG

【讨论】:

  • 我删除了它们并创建了一个新类,所以当我点击图片按钮时,它应该带入新类。但是应用程序仍然崩溃,这次没有显示错误。我的 getImage 方法有问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多