Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.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 单击按钮时图像不会保存在设备中_Java_Android_Database_Download_Picasso - Fatal编程技术网

Java 单击按钮时图像不会保存在设备中

Java 单击按钮时图像不会保存在设备中,java,android,database,download,picasso,Java,Android,Database,Download,Picasso,目前,我正在使用毕加索图书馆下载图像,并在按下按钮时将其保存在设备中。问题是当我按下按钮时,图像没有下载,只是显示消息“图像已下载”,那么我如何修复它这是我的代码 PicassoDisplayImageAdapter.java /* * This class for display the image when clicking on it * It gets the data from the class have the images "Images in ArrayList" * Also

目前,我正在使用毕加索图书馆下载图像,并在按下按钮时将其保存在设备中。问题是当我按下按钮时,图像没有下载,只是显示消息“图像已下载”,那么我如何修复它这是我的代码

PicassoDisplayImageAdapter.java

/*
* This class for display the image when clicking on it
* It gets the data from the class have the images "Images in ArrayList"
* Also It is for download images
*/
public class PicassoDisplayImageAdapter extends AppCompatActivity {

public static final int PERMISSION_WRITE = 0;
String fileUri;
Button download_image;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_image);

/* Display the data in the ImageView with Picasso "ImageView that insert in he activity" */
final ImageView imageView = findViewById(R.id.image_display);
final Intent intent = getIntent();
if (intent.hasExtra("imageUrl")){
    String url = intent.getStringExtra("imageUrl");
    Picasso.with(this)
            .load(url)
            .fit() // to resize the image to imageView
            .placeholder(R.drawable.progress_animation)
            .error(R.drawable.error)
            .into(imageView);
}

/* button to download the image */
download_image = findViewById(R.id.button_download);
checkPermission();
download_image.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (checkPermission()) {
            String URL = intent.getStringExtra("imageUrl");
            SaveImage (URL);
        }
    }
});
}

/* method to save image*/
private void SaveImage(String url) {
Picasso.with(getApplicationContext()).load(url).into(new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        try {
            File mydir = new File(Environment.getExternalStorageDirectory() + "/11zon");
            if (!mydir.exists()) {
                mydir.mkdirs();
            }

            fileUri = mydir.getAbsolutePath() + File.separator + System.currentTimeMillis() + ".jpg";
            FileOutputStream outputStream = new FileOutputStream(fileUri);

            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
            outputStream.flush();
            outputStream.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
        Toast.makeText(getApplicationContext(), "Image Downloaded", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
      }
  });
}

 /* runtime storage permission */
 public boolean checkPermission() {
int READ_EXTERNAL_PERMISSION = ContextCompat.checkSelfPermission(this, 
 Manifest.permission.READ_EXTERNAL_STORAGE);
  if((READ_EXTERNAL_PERMISSION != PackageManager.PERMISSION_GRANTED)) {
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
  PERMISSION_WRITE);
     return false;
 }
    return true;
 }

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==PERMISSION_WRITE && grantResults.length > 0 && grantResults[0] == 
 PackageManager.PERMISSION_GRANTED) {
    //do somethings
    }
  }
}
ImagesRamadanActivity.java包含数据的

/*
* This Activity for display the ramadan images
* This class has the data of images
*/
 public class ImagesRamadanActivity extends AppCompatActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_ramadan_images);

/* ArrayList for RamadanImages */
final String[] RamadanImages = {
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
        "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
};

/* make new object and find the view "GridView" */
GridView gridView2 = findViewById(R.id.gridview_image_ramadan);
// display all the images from Array on it
gridView2.setAdapter(new PicassoImagesAdapter(ImagesRamadanActivity.this, RamadanImages));

/* display the image when click on it */
// we made a class for this method "the class called PicassoDisplayImageAdapter"
gridView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // get the image
        String image = RamadanImages[position];
        Intent intent = new Intent(ImagesRamadanActivity.this, PicassoDisplayImageAdapter.class);
        intent.putExtra("imageUrl", image);
        ImagesRamadanActivity.this.startActivity(intent);
    }
});
/*
*此活动用于显示斋月图像
*此类具有图像的数据
*/
公共类ImagesRamadanActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u斋月图像);
/*RamadanImages的ArrayList*/
最终字符串[]RamadanImages={
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
};
/*创建新对象并查找视图“GridView”*/
GridView gridView2=findViewById(R.id.GridView\u image\u ramadan);
//显示阵列中的所有图像
gridView2.setAdapter(新的PicassoImagesAdapter(ImagesRamadanActivity.this,RamadanImages));
/*单击图像时显示图像*/
//我们为这个方法创建了一个类“名为PicassoDisplayImageAdapter的类”
gridView2.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//获取图像
字符串图像=RamadanImages[位置];
Intent Intent=新的Intent(ImagesRamadanActivity.this,PicassoDisplayImageAdapter.class);
intent.putExtra(“imageUrl”,图像);
ImagesRamadanActivity.this.startActivity(意向);
}
});
activity\u image\u display.xmlactivity以显示照片,并具有下载图像的按钮

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="#fff"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
  android:id="@+id/image_display"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="#fff"
  android:layout_centerHorizontal="true"
  android:layout_centerVertical="true" >
</ImageView>

<Button
  android:id="@+id/button_download"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="download the image"
  android:layout_alignParentBottom="true"
  android:layout_marginBottom="0dp" />

</RelativeLayout>

内部

onCreate(){
       setContentView(..);
       // requestPermission. ask for permission when app starts.
}    

        @Override
        public void onClick(View v) {
            if (checkPermission()) {
                String URL = intent.getStringExtra("imageUrl");
                SaveImage (URL);
            }
        }
//在这种情况下,将此块添加到现有代码中

  private void requestPermission() {
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
         Toast.makeText(MainActivity.this, "Write External Storage permission allows us to save files. Please allow this permission in App Settings.", Toast.LENGTH_LONG).show();
      } else {
         ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
      }
   }

//确保清单中定义了所有权限

请求此第一次检查权限()请原谅,因为我还是Android新手,你是说if condition中的这一个吗?然后你应该学习关于权限的基本知识,任何你需要先请求的方式。然后单击按钮,检查CheckPermission这是否回答了你的问题?好吧,我在MainActivity中添加了这一代码,并且事实上,当我进入程序时,会显示消息,但当我转到图片并下载图像时,图像也不会保存在设备中,同样的问题。