我只运行了您的代码,它对我来说很好用。该图像已下载到sdcard。
请注意,请确保在AndroidManifest.xml中设置了以下权限:
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这是我得到的日志(请注意,我添加了
ProgressDialog):
03-21 16:53:46.422 21017-21017/com.imagedownload.danielnugent.imagedownload D/Activity﹕ #1 setTransGradationModeColor false03-21 16:53:56.211 21017-21017/com.imagedownload.danielnugent.imagedownload D/Activity﹕ #1 setTransGradationModeColor false03-21 16:54:06.441 21017-21017/com.imagedownload.danielnugent.imagedownload I/System.out﹕ Starting download03-21 16:54:06.441 21017-21017/com.imagedownload.danielnugent.imagedownload D/Dialog﹕ checkMirrorlinkEnabled returns : false03-21 16:54:06.441 21017-21017/com.imagedownload.danielnugent.imagedownload D/Dialog﹕ showing allowed03-21 16:54:06.461 21017-25126/com.imagedownload.danielnugent.imagedownload I/System.out﹕ Downloading03-21 16:54:06.461 21017-21017/com.imagedownload.danielnugent.imagedownload D/Activity﹕ #1 setTransGradationModeColor false03-21 16:54:06.481 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: left = 003-21 16:54:06.481 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: top = 003-21 16:54:06.491 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: right = 14403-21 16:54:06.491 21017-21017/com.imagedownload.danielnugent.imagedownload D/ProgressBar﹕ updateDrawableBounds: bottom = 14403-21 16:54:11.596 21017-21017/com.imagedownload.danielnugent.imagedownload I/System.out﹕ Downloaded
万一这很有用,这是对我有用的完整MainActivity.java代码。(URL是一个占位符):
import android.app.ProgressDialog;import android.os.AsyncTask;import android.os.Environment;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import java.io.BufferedInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;import java.net.URLConnection;public class MainActivity extends ActionBarActivity { private ProgressDialog pDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new DownloadFileFromURL().execute("http://www.example.com/IMG.jpg"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } class DownloadFileFromURL extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); System.out.println("Starting download"); pDialog = new ProgressDialog(MainActivity.this); pDialog.setMessage("Loading... Please wait..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } @Override protected String doInBackground(String... f_url) { int count; try { String root = Environment.getExternalStorageDirectory().toString(); System.out.println("Downloading"); URL url = new URL(f_url[0]); URLConnection conection = url.openConnection(); conection.connect(); // getting file length int lenghtOfFile = conection.getContentLength(); // input stream to read file - with 8k buffer InputStream input = new BufferedInputStream(url.openStream(), 8192); // Output stream to write file OutputStream output = new FileOutputStream(root+"/downloadedfile.jpg"); byte data[] = new byte[1024]; long total = 0; while ((count = input.read(data)) != -1) { total += count; // 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; } @Override protected void onPostExecute(String file_url) { System.out.println("Downloaded"); pDialog.dismiss(); } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)