从URL图像下载到SD卡 [英] Download Images From URL to SD Card
问题描述
我想创建一个非常简单的图片下载应用程序。其中我想从这个网址的所有图像下载到SD卡: https://www.dropbox.com/sh/5be3kgehyg8uzh2/AAA-jYcy_21nLBwnZQ3TBFAea
这code工作负载形象ImageView的:
包com.example.imagedownloadsample;
进口android.os.Bundle;
进口android.support.v7.app.ActionBarActivity;
进口android.widget.ImageView;
进口com.squareup.picasso.Picasso;
公共类MainActivity扩展ActionBarActivity {
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.image_download);
最后ImageView的IMG =(ImageView的)(findViewById(R.id.imageView1));
//档案文件=新的文件(Environment.getExternalStorageDirectory()
//的Android /数据/ com.usd.pop);
Picasso.with(getApplicationContext())
.load(http://8020.photos.jpgmag.com/3456318_294166_528c960558_m.jpg)
。走进(IMG);
}
}
但是当我试图这样来下载图片到SD卡我最终与可惜的是应用程序停止错误:
包com.example.imagedownloadsample;
进口的java.io.File;
进口android.os.Bundle;
进口android.os.Environment;
进口android.support.v7.app.ActionBarActivity;
进口com.squareup.picasso.Picasso;
进口com.squareup.picasso.Target;
公共类MainActivity扩展ActionBarActivity {
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.image_download);
//最后ImageView的IMG =(ImageView的)(findViewById(R.id.imageView1));
档案文件=新的文件(Environment.getExternalStorageDirectory()
安卓/数据/ com.usd.pop);
Picasso.with(getApplicationContext())
.load(http://8020.photos.jpgmag.com/3456318_294166_528c960558_m.jpg)
。走进((目标)文件);
}
}
您可以使用此的AsyncTask
,这样你就不会得到 OnMainThread
例外。
类DownloadFile扩展的AsyncTask<字符串,整数,龙> {
ProgressDialog mProgressDialog =新ProgressDialog(MainActivity.this); //改变Mainactivity.this您的活动名称。
字符串strFolderName;
@覆盖
在preExecute保护无效(){
super.on preExecute();
mProgressDialog.setMessage(下载);
mProgressDialog.setIndeterminate(假);
mProgressDialog.setMax(100);
mProgressDialog.setCancelable(真正的);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.show();
}
@覆盖
保护龙doInBackground(字符串... aurl){
诠释计数;
尝试 {
网址URL =新的URL((字符串)aurl [0]);
URLConnection的体conexion = url.openConnection();
conexion.connect();
字符串targetFileName =姓名+RAR。; //更改名称和子名称
INT lenghtOfFile = conexion.getContentLength();
字符串PATH = Environment.getExternalStorageDirectory()+/+ downloadFolder +/;
文件夹=新的文件(路径);
如果(!folder.exists()){
folder.mkdir(); //如果没有将被创建的文件夹。
}
的InputStream输入=新的BufferedInputStream(url.openStream());
的OutputStream输出=新的FileOutputStream(PATH + targetFileName);
字节的数据[] =新的字节[1024];
总长= 0;
而((计数= input.read(数据))!= - 1){
共有+ =计数;
publishProgress((int)的(总* 100 / lenghtOfFile));
output.write(数据,0,计数);
}
output.flush();
output.close();
input.close();
}赶上(例外五){}
返回null;
}
保护无效onProgressUpdate(整数...进度){
mProgressDialog.setProgress(进展[0]);
如果(mProgressDialog.getProgress()== mProgressDialog.getMax()){
mProgressDialog.dismiss();
Toast.makeText(FA,文件下载,Toast.LENGTH_SHORT).show();
}
}
保护无效onPostExecute(字符串结果){
}
}
复制这个类到你的活动。它不能是在另一种方法。
和您可以调用这个像
新DownloadFile()执行(yoururl);
此外,将这些权限添加到您的清单。
<使用-权限的Android:名称=android.permission.INTERNET对> < /使用-许可>
<使用-权限的Android:名称=android.permission.WRITE_EXTERNAL_STORAGE>< /使用-许可>
<使用-权限的Android:名称=android.permission.READ_PHONE_STATE>< /使用-许可>
I am trying to create a very simple Image Downloading app. in which i want to download all images from this url to sd card: https://www.dropbox.com/sh/5be3kgehyg8uzh2/AAA-jYcy_21nLBwnZQ3TBFAea
this code works to load image in imageview:
package com.example.imagedownloadsample;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_download);
final ImageView img = (ImageView) (findViewById(R.id.imageView1));
// File file = new File(Environment.getExternalStorageDirectory(),
// "Android/data/com.usd.pop");
Picasso.with(getApplicationContext())
.load("http://8020.photos.jpgmag.com/3456318_294166_528c960558_m.jpg")
.into(img);
}
}
but when i tried like this to download image to sd card i end-up with unfortunatelly app stopped error:
package com.example.imagedownloadsample;
import java.io.File;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_download);
//final ImageView img = (ImageView) (findViewById(R.id.imageView1));
File file = new File(Environment.getExternalStorageDirectory(),
"Android/data/com.usd.pop");
Picasso.with(getApplicationContext())
.load("http://8020.photos.jpgmag.com/3456318_294166_528c960558_m.jpg")
.into((Target) file);
}
}
You can use this AsyncTask
, so that you don't get OnMainThread
exception.
class DownloadFile extends AsyncTask<String,Integer,Long> {
ProgressDialog mProgressDialog = new ProgressDialog(MainActivity.this);// Change Mainactivity.this with your activity name.
String strFolderName;
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.setMessage("Downloading");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setCancelable(true);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.show();
}
@Override
protected Long doInBackground(String... aurl) {
int count;
try {
URL url = new URL((String) aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
String targetFileName="Name"+".rar";//Change name and subname
int lenghtOfFile = conexion.getContentLength();
String PATH = Environment.getExternalStorageDirectory()+ "/"+downloadFolder+"/";
File folder = new File(PATH);
if(!folder.exists()){
folder.mkdir();//If there is no folder it will be created.
}
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(PATH+targetFileName);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress ((int)(total*100/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {}
return null;
}
protected void onProgressUpdate(Integer... progress) {
mProgressDialog.setProgress(progress[0]);
if(mProgressDialog.getProgress()==mProgressDialog.getMax()){
mProgressDialog.dismiss();
Toast.makeText(fa, "File Downloaded", Toast.LENGTH_SHORT).show();
}
}
protected void onPostExecute(String result) {
}
}
Copy this class into your activity. It mustn't be in another method.
And you can call this like
new DownloadFile().execute("yoururl");
Also, add these permissions to your manifest.
<uses-permission android:name="android.permission.INTERNET"> </uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
这篇关于从URL图像下载到SD卡的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!