2

このURLから画像をダウンロードするには、私のアンドロイドアプリが必要です。 私はこのクラスを作りましたが、うまくいきませんでしたか? ??URLからファイル/画像をダウンロードする方法

public class MyAsnyc extends AsyncTask<Void, Void, Void> { 
public static File file; 
InputStream is; 

    protected void doInBackground() throws IOException { 
     File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     file = new File(path, "DemoPicture.jpg"); 

     try{ 
      // Make sure the Pictures directory exists. 
      path.mkdirs(); 

      URL url = new URL("http://androidsaveitem.appspot.com/downloadjpg"); 

      // Open a connection to that URL. 
      URLConnection ucon = url.openConnection(); 

      // Define InputStreams to read from the URLConnection. 
      is = ucon.getInputStream(); 
     } catch (IOException e) { 
      Log.d("ImageManager", "Error: " + e); 
     } 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      doInBackground(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    protected void onPostExecute() { 
     try { 
      OutputStream os = new FileOutputStream(file); 
      byte[] data = new byte[is.available()]; 
      is.read(data); 
      os.write(data); 
      is.close(); 
      os.close(); 

      // Tell the media scanner about the new file so that it is 
      // immediately available to the user. 
      MediaScannerConnection.scanFile(
       null, 
       new String[] { file.toString() }, 
       null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        public void onScanCompleted(String path, Uri uri) { 
         Log.i("ExternalStorage", "Scanned " + path + ":"); 
         Log.i("ExternalStorage", "-> uri=" + uri); 
        } 
       } 
      ); 
     } 
     catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

そして、私は)(onclickの、この関数のActivityクラスでは、持っている:

public void down(View v) { 
    // ImageManager ob=new ImageManager(); 
    // ob.DownloadFromUrl(""); 

    new MyAsnyc().execute(); 
} 

私はmanfiest.xmlに権限を書かれているが、

<uses-sdk android:minSdkVersion="7" /> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+1

何の応答をしてみてください? –

+0

応答がありません、画像がダウンロードされません –

+0

これは助けるべきより詳細な答えです:http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-showing-the-progress -in-a-progressdialog – hB0

答えて

0

問題コードではInputStreamは読まれていません。 あなたはこの

Bitmap bitmap = BitmapFactory.decodeStream(is); 
return bitmap; 

を試してみて、BitmapとしてAsynctaskreturn種類を確認する必要があります。 または これは、にdoInBackground()isを使用しているため、returnInputStreamのオブジェクトisです。しかし、あなたはvoidを返しています。

Okey.Try thisはAsynctaskと編集してください。

private class MyAsnyc extends AsyncTask <Void,Void,File> { 
    File file; 
    @Override 
    protected File doInBackground(Void... params) { 
     InputStream is = null; 
     File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     file = new File(path , "Demo Picture.jpg") ; 
     try { // Make sure the Pictures directory exists.path.mkdirs() ; URL url = new URL ("http://androidsaveitem .appspot.com/download.jpg") ; URLConnection ucon = url.openConnection () ; 
      path.mkdirs(); 

      OutputStream os = new FileOutputStream(file) ; 
      byte [ ] data = new byte [ is.available () ] ; 
      is.read (data) ; os.write (data);is.close () ; os.close () ; 
      return file; 
     } 
     catch (Exception e){ 
      Log .d ("ImageManager " , " Error: " + e) ; 
     }   

     return null; 
    } 
    protected void onPostExecute (File file) { 
     try{ 
      MediaScannerConnection.scanFile(null , new String [] {file.toString() } , null , new MediaScannerConnection.OnScanCompletedListener () { public void onScanCompleted (String path, Uri uri) { 
       Log.i (" External Storage" , " Scanned " + path + " : ") ; Log.i (" E x t e r n a l S t o r a g e " , " - > u r i = " + uri) ; } }) ; 
     }catch (Exception e) { 
      // TODO: handle exception 
     } 
    }} 
+0

何を意味するのか分かりませんか? –

+0

Asynctaskの3番目のパラメータをInputStreamとして試してみてください。戻り値はdoinbackground – Som

+0

です。私が混乱していると言ったことを使ってこのコードを修正できますか? –

3

は、このコードを実行するときになって、この

public class MyAsnyc extends AsyncTask<Void, Void, Void> { 
    public static File file; 
    InputStream is; 

    protected void doInBackground() throws IOException { 

     File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     file = new File(path, "DemoPicture.jpg"); 
     try {  
      // Make sure the Pictures directory exists. 
      path.mkdirs(); 

      URL url = new URL("http://androidsaveitem.appspot.com/downloadjpg"); 
      /* Open a connection to that URL. */ 
      URLConnection ucon = url.openConnection(); 

      /* 
      * Define InputStreams to read from the URLConnection. 
      */ 
      is = ucon.getInputStream(); 

      OutputStream os = new FileOutputStream(file); 
      byte[] data = new byte[is.available()]; 
      is.read(data); 
      os.write(data); 
      is.close(); 
      os.close(); 

     } catch (IOException e) { 
      Log.d("ImageManager", "Error: " + e); 
     } 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     try { 
      doInBackground(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    protected void onPostExecute() { 
     try { 
      // Tell the media scanner about the new file so that it is 
      // immediately available to the user. 
      MediaScannerConnection.scanFile(null, 
        new String[]{file.toString()}, null, 
        new MediaScannerConnection.OnScanCompletedListener() { 
         public void onScanCompleted(String path, Uri uri) { 
          Log.i("ExternalStorage", "Scanned " + path + ":"); 
          Log.i("ExternalStorage", "-> uri=" + uri); 
         } 
        }); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 
+1

古いもので何を修正しますか? –

+0

このログを参照 "03-18 23:28:24.611:D/ImageManager(332):エラー:java.io. FileNotFoundException:/mnt/sdcard/Pictures/DemoPicture.jpg(許可が拒否されました) " –

+0

image is courrなぜそれがそうですか? –

関連する問題