0

だから私はURL画像(.png)を電話自体にダウンロードする方法の説明を探していました-

写真を選択したらメニュー選択をオフにするメソッドがあります-そしてそれはURLパスと私がそれを呼び出したいファイル名を送信します(当分の間test.png)

UIを自由に保つために、このAsynCも実行しようとしています-

以下のコードは実際にはうまくいきますが、画像は保存されていないようです-(携帯電話にSDカードがありませんが、テストのためにデータフォルダに保存しようとしましたが、同じ結果になりました)

protected void saveImage(String imageUrl, String fileName){  
    class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{
        private String imageUrl;
        private String fileName;
        public SendPostReqAsyncTask (String imageUrl, String fileName)
        {   
            super();
            this.imageUrl=imageUrl;
            this.fileName=fileName;
        }
        @Override
        protected String doInBackground(String... params) {
            String newfilename="";
            try {
                File externalStorageDirectory = Environment.getExternalStorageDirectory();
                URL urlTmp = new URL(imageUrl);
                newfilename = urlTmp.getFile();
                newfilename = externalStorageDirectory + "/" + fileName;
                Bitmap bitmap = BitmapFactory.decodeStream(urlTmp.openStream());
                FileOutputStream fileOutputStream = new FileOutputStream(newfilename);
                if (bitmap != null) {
                    bitmap.compress(CompressFormat.PNG, 50, fileOutputStream);
                    return newfilename;
                }
            } catch (MalformedURLException e) {
                Log.w("errorSaving", "Could not save image with url: " + imageUrl, e);
            } catch (IOException e) {
                Log.w("errorSaving", "Could not save image with url: " + imageUrl, e);
            }
            Log.d("errorSaving", "Failed to save image " + fileName);

            return newfilename;
        }

        //handle result when done
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Toast.makeText(getApplicationContext(), "Photo saved to phone: " + result, Toast.LENGTH_LONG).show();
        }
    }
    SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(imageUrl,fileName);
    sendPostReqAsyncTask.execute();     
}
4

1 に答える 1

0
//To download image from a url
Drawable image;
try {
    InputStream is          = (InputStream) this.fetch(your_image_url);
    image                   = Drawable.createFromStream(is,"src");
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

//Convert drawable to Bitmap
Bitmap bitmap = ((BitmapDrawable)image).getBitmap();

//Save Bitmap to a file
try {image
       FileOutputStream out = new FileOutputStream(filename);
       bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
       e.printStackTrace();
}

また、マニフェスト ファイルでインターネット アクセス許可を設定していることを確認してください。

<uses-permission android:name="android.permission.INTERNET" />
于 2012-12-02T07:05:16.853 に答える