Я пытаюсь прочитать изображение с устройства Android, а затем загрузить его в Microsoft Azure Мобильный сервис.java.lang.NullPointerException: попытка вызвать виртуальный метод 'char [] java.lang.String.toCharArray()' на ссылке нулевого объекта
pickImage() и onActivityResult() методы работают хорошо, как изображение может быть успешно отображаться в Image View, используя код
mImageView.setImageURI(currImageURI);
Когда я пытаюсь сохранить изображение с помощью saveToDo () метод есть ошибка в строке
FileInputStream fis = new FileInputStream(absoluteFilePath);
Поэтому я пытаюсь напечатать, что именно содержит в курсоре с помощью кода
System.out.println("IMAGE: " + DatabaseUtils.dumpCursorToString(cursor));
System.out.println("CURRENT: " + DatabaseUtils.dumpCurrentRowToString(cursor));
Я получаю следующее сообщение об ошибке.
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference
W/System.err: at java.io.File.fixSlashes(File.java:183)
W/System.err: at java.io.File.<init>(File.java:130)
W/System.err: at java.io.FileInputStream.<init>(FileInputStream.java:103)
W/System.err: at com.king.recipesharinghub.AddRecipe.saveTodo(AddRecipe.java:773)
W/System.err: at com.king.recipesharinghub.AddRecipe$3.onClick(AddRecipe.java:214)
W/System.err: at android.view.View.performClick(View.java:5198)
W/System.err: at android.view.View$PerformClick.run(View.java:21147)
W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
I/TodoDetailsActivity: JSON: {"complete":"false","text":"This is testing"}
Это системные выходы, где данные являются нулевыми.
I/System.out: Image URL: content://com.android.providers.media.documents/document/image%3A36
I/System.out: PROJECTION: [Ljava.lang.String;@290e1f6
I/System.out: DATABASE: >>>>> Dumping cursor [email protected]
I/System.out: 0 {
I/System.out: _data=null
I/System.out: }
I/System.out: <<<<<
I/System.out: CURRENT: 0 {
I/System.out: _data=null
I/System.out: }
I/System.out: INDEX: 0
I/System.out: ABSOLUTEFILEPATH: null
Ниже приведены полные коды
protected void pickImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 987);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
//handle result from gallary select
if (requestCode == 987) {
Uri currImageURI = data.getData();
this.mImageUrl = currImageURI;
//Set the image view's image by using imageUri
mImageView.setImageURI(currImageURI);
}
} catch (Exception ex) {
Log.e("TodoDetailsActivity", "Error in onActivityResult: " + ex.getMessage());
}
}
protected void saveTodo() {
String imageString = null;
if (mImageUrl != null && !mImageUrl.equals("")) {
try {
System.out.println("Image URL: " + mImageUrl.toString());
String[] projection = { MediaStore.Images.Media.DATA };
System.out.println("PROJECTION: " + projection);
Cursor cursor = getContentResolver().query(mImageUrl, projection,
null, null, null);
cursor.moveToFirst();
System.out.println("DATABASE: " + DatabaseUtils.dumpCursorToString(cursor));
System.out.println("CURRENT: " + DatabaseUtils.dumpCurrentRowToString(cursor));
int index = cursor
.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
System.out.println("INDEX: " + index);
String absoluteFilePath = cursor.getString(index);
System.out.println("ABSOLUTEFILEPATH: " + absoluteFilePath);
FileInputStream fis = new FileInputStream(absoluteFilePath);
int bytesRead = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while ((bytesRead = fis.read(b)) != -1) {
bos.write(b, 0, bytesRead);
}
byte[] bytes = bos.toByteArray();
imageString = Base64.encodeToString(bytes, Base64.DEFAULT);
} catch (Exception ex) {
ex.printStackTrace();
}
}
new SaveTodoTask(this).execute("This is testing", imageString);
}
Надежда, чтобы получить мою проблему решить, как я застрял на этот вопрос в течение нескольких дней. Спасибо!
Hi @SilvansSolanki, Благодарим вас за ответ. Я попытался добавить проекцию к моему коду, но я получаю следующую ошибку. java.lang.NullPointerException: попытка вызвать виртуальный метод 'char [] java.lang.String.toCharArray()' для ссылки на нулевой объект Теперь, когда я распечатываю данные, при возврате данных нет значения. ИЗОБРАЖЕНИЯ: >>>>> сбросы курсор [email protected] I/System.out: 0 { I/System.out: _data = NULL I/System.out:} ввод/System.out: <<<<< I/System.out: CURRENT: 0 { I/System.out: _data = null I/System.out:} –
Это означает, что вы получаете новое сообщение об ошибке сейчас, а не предыдущее сообщение об ошибке. Можете ли вы опубликовать обновленный код, чтобы я мог помочь вам в решении. –
Привет @SilvansSolanki, я обновил свой код и полученное сообщение об ошибке. –