Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 毕加索在RecycleView中未加载图像(可能是路径错误)_Java_Android_Android Recyclerview_Picasso - Fatal编程技术网

Java 毕加索在RecycleView中未加载图像(可能是路径错误)

Java 毕加索在RecycleView中未加载图像(可能是路径错误),java,android,android-recyclerview,picasso,Java,Android,Android Recyclerview,Picasso,嗨,伙计们,我在用毕加索将图像加载到Recycleview时遇到了一个问题。我想将图像路径保存到db并在recycleview上显示图像。当我手动使用path时,它可以工作,但我认为它不能正确保存或检索 选择以-content://com.android.providers.media.documents/document/image%3A392 getImage重新运行为-/document/image:392 并将其另存为-/document/image:392 从适配器: public v

嗨,伙计们,我在用毕加索将图像加载到Recycleview时遇到了一个问题。我想将图像路径保存到db并在recycleview上显示图像。当我手动使用path时,它可以工作,但我认为它不能正确保存或检索

选择以-
content://com.android.providers.media.documents/document/image%3A392

getImage重新运行为-
/document/image:392

并将其另存为-
/document/image:392

从适配器:

public void onBindViewHolder(MyHolder holder, int position) {

    holder.notestxt.setText(notes.get(position).getNote());
    if (notes.get(position).getImage().trim().length() != 0) {
        holder.img1.setVisibility(VISIBLE);
        Picasso.get().load(notes.get(position).getImage()).into(holder.img1);
    } else {
        holder.img1.setVisibility(GONE);
    }

    holder.setItemClickListener(new ItemClickListener() {

        @Override
        public void onItemClick(View v, int pos) {
            //OPEN DETAIL ACTIVITY
            //PASS DATA

            //CREATE INTENT
            Intent i = new Intent(c, editnote.class);

            //LOAD DATA
            i.putExtra("NOTE", notes.get(pos).getNote());

            //START ACTIVITY
            c.startActivity(i);
        }
    });
}
和部分活动:

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            break;
        case R.id.action_image:
            ActivityCompat.requestPermissions(addnote.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    1);
            getimages();
            break;
        case R.id.action_save:
            if (editable_item.getText().toString().trim().length() != 0) {
                save(editable_item.getText().toString(), "");
                Intent i = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(i);
                Toast.makeText(getApplicationContext(), "Note saved", Toast.LENGTH_SHORT).show();
            } else {
                String path = selectedImage.getPath();
                save("", path);
                Intent i = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(i);
                Toast.makeText(getApplicationContext(), "Image saved", Toast.LENGTH_SHORT).show();
            }
            break;

        case R.id.action_cancel:
            Intent x = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(x);
            finish();
    }
    return true;
}

private void save(String note, String image) {
    DBAdapter db = new DBAdapter(this);

    //OPEN
    db.openDB();

    //INSERT
    long result = db.add(note, image);

    editable_item.setText("");

    //CLOSE
    db.close();

}

private void getimages() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Contact Image"), 1);

    @Override
    protected void onActivityResult ( int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1 && resultCode == RESULT_OK && null != data) {

            selectedImage = data.getData();

            editable_item.setVisibility(View.GONE);
            imageView.setVisibility(View.VISIBLE);
            Picasso.get().load(selectedImage).into(imageView);
        }
    }
}

您需要首先通过此代码将
data.getData
从Uri转换为实路径

private String getRealPathFromContentUri(Context context, Uri contentURI) {
    String result = null;
    Cursor cursor = context.getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) {
      try {
        result = contentURI.getPath();
      } catch (Exception e) {
        e.printStackTrace();
      }
    } else {
      cursor.moveToFirst();
      int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
      try {
        result = cursor.getString(idx);
        cursor.close();
      } catch (IllegalStateException e) {
        e.printStackTrace();
        return null;
      }
    }
    return result;
}
您的
OnActivityResult
如下所示:

@Override
    protected void onActivityResult ( int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1 && resultCode == RESULT_OK && null != data) {

            selectedImage = getRealPathFromContentUri(context,data.getData());

            editable_item.setVisibility(View.GONE);
            imageView.setVisibility(View.VISIBLE);
            Picasso.get().load(selectedImage).into(imageView);
        }
}

onBindViewHolder()
中返回什么
notes.get(position).getImage()
?它是否为空/
null
或不为空?在保存图像时,将其存储到应用程序存储并将该路径保留在数据库中。@Boken notes.get(position).getImage()返回为“/document/image:392”,如果
content://com.android.providers.media.documents/
不变,为什么不将其与getImage连接起来,类似于
"content://com.android.providers.media.documents/“+notes.get(position).getImage()
加载iImage的路径不正确。您必须为此文件创建完整Uri。