-2

私はsdcardを挿入すると動作します。JSONから画像をダウンロードするurl is not working。

どうすれば内部のストレージに保存できますか?

URLから画像をダウンロードし、SDカードに挿入したときに自分の携帯に表示したい場合があります。
サムスン銀河S6エッジにはSdcardがありませんので、イメージはダウンロードできません。外部ストレージではなく内部ストレージにイメージを保存できますか?

package com.example.makdia.tuntuninews; 

import java.io.BufferedInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.URL; 
import java.net.URLConnection; 

import android.app.Activity; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.graphics.drawable.Drawable; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ViewImage extends AppCompatActivity { 


    Button btnShowProgress; 
    String _id; 
    // Progress Dialog 
    private ProgressDialog pDialog; 
    ImageView my_image; 
    // Progress dialog type (0 - for Horizontal progress bar) 
    public static final int progress_bar_type = 0; 
    String _photo; 
    // File url to download 
    public static String file_url; 

    TextView id, name; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view_image); 

     id = (TextView) findViewById(R.id.photoid); 
     name = (TextView) findViewById(R.id.photoname); 


     _id = getIntent().getStringExtra("MyID"); 
     file_url = getIntent().getStringExtra("MyPhoto"); 
     final String _name = getIntent().getStringExtra("MyName"); 

     id.setText("PhotoID = "+_id); 
     name.setText("PhotoName = "+_name +" "+file_url+ "\n\n"); 


     btnShowProgress = (Button) findViewById(R.id.btnProgressBar); 
     // Image view to show image after downloading 
     my_image = (ImageView) findViewById(R.id.my_image); 
     /** 
     * Show Progress bar click event 
     * */ 
     btnShowProgress.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // starting new Async Task 
       new DownloadFileFromURL().execute(file_url); 
      } 
     }); 



    } 

    /** 
    * Showing Dialog 
    * */ 
    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
      case progress_bar_type: // we set this to 0 
       pDialog = new ProgressDialog(this); 
       pDialog.setMessage("Downloading file. Please wait..."); 
       pDialog.setIndeterminate(false); 
       pDialog.setMax(100); 
       pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
       pDialog.setCancelable(true); 
       pDialog.show(); 
       return pDialog; 
      default: 
       return null; 
     } 
    } 

    /** 
    * Background Async Task to download file 
    * */ 
    class DownloadFileFromURL extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread 
     * Show Progress Bar Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      showDialog(progress_bar_type); 
     } 

     /** 
     * Downloading file in background thread 
     * */ 
     @Override 
     protected String doInBackground(String... f_url) { 
      int count; 
      try { 
       URL url = new URL(f_url[0]); 
       URLConnection conection = url.openConnection(); 
       conection.connect(); 
       // this will be useful so that you can show a tipical 0-100% progress bar 
       int lenghtOfFile = conection.getContentLength(); 

       // download the file 
       InputStream input = new BufferedInputStream(url.openStream(), 8192); 

       // Output stream 
       OutputStream output = new FileOutputStream("/sdcard/"+_id+".jpg"); 

       byte data[] = new byte[1024]; 

       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        // After this onProgressUpdate will be called 
        publishProgress(""+(int)((total*100)/lenghtOfFile)); 

        // writing data to file 
        output.write(data, 0, count); 
       } 

       // flushing output 
       output.flush(); 

       // closing streams 
       output.close(); 
       input.close(); 

      } catch (Exception e) { 
       Log.e("Error: ", e.getMessage()); 
      } 

      return null; 
     } 

     /** 
     * Updating progress bar 
     * */ 
     protected void onProgressUpdate(String... progress) { 
      // setting progress percentage 
      pDialog.setProgress(Integer.parseInt(progress[0])); 
     } 

     /** 
     * After completing background task 
     * Dismiss the progress dialog 
     * **/ 
     @Override 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after the file was downloaded 
      dismissDialog(progress_bar_type); 

      // Displaying downloaded image into image view 
      // Reading image path from sdcard 
      String imagePath = Environment.getExternalStorageDirectory().toString() +"/"+_id+".jpg"; 
      // setting downloaded into image view 
      my_image.setImageDrawable(Drawable.createFromPath(imagePath)); 
     } 

    } 



} 

答えて

0

置き換えます

FileOutputStream outputStream = openFileOutput(_id+".jpg", Context.MODE_PRIVATE); 

NB:付き

OutputStream output = new FileOutputStream("/sdcard/"+_id+".jpg"); 

ファイルを保存する前ストレージためランタイム許可を追加します。お役に立てれば。

+0

それは仲間を働かせません。その6.0の問題かもしれません。そのストレージ/エミュレート/ 0/11.jpgアクセスを開くことができません拒否 –

+0

私はstacktraceを表示することはできますか?ストレージの実行時アクセス許可を追加していませんか? – tahsinRupam

+0

はい、今それを言います。私は実行時のアクセス許可を追加して、現在作業中です。 –

関連する問題