图片下载和json下载(sd卡)

本文介绍如何在Android应用中实现图片和JSON数据的下载,并存储到SD卡上,涉及关键库包如universal-image-loader和xUtils的使用。
package com.example.download;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends ActionBarActivity {
	String path = "http://ic.snssdk.com/2/article/v25/stream/?category=news_local&count=20&min_behot_time=1465198212&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1465265107&loc_mode=5&user_city=%E5%8C%97%E4%BA%AC&lac=4527&cid=28883&iid=4464422609&device_id=17258390367&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SAMSUNG&os_api=19&os_version=4.4.4&uuid=353040417908000&openudid=84c1c7b192991cc6";
	private ImageView imageView;
String imagePath="https://img.alicdn.com/tps/TB1ivRiKFXXXXbhXXXXXXXXXXXX-520-280.jpg";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		
		
//		load();

		imageView = (ImageView) findViewById(R.id.imageView);
		
//		loadImage();
		//下载json文件
		loadDataXutils();
		
		ImageLoader instance = ImageLoader.getInstance();
		instance.displayImage(imagePath, imageView);
	}
//ImageLoader下载图片
	private void loadImage() {

		ImageLoader instance = ImageLoader.getInstance();
		
		instance.loadImage(imagePath, new ImageLoadingListener() {
			
			@Override
			public void onLoadingStarted(String arg0, View arg1) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
				// TODO Auto-generated method stub
//				imageView.setImageBitmap(arg2);
				System.out.println("下载成功");
			}
			
			@Override
			public void onLoadingCancelled(String arg0, View arg1) {
				// TODO Auto-generated method stub
				
			}
		});
		
		
	}



	protected void loadDataXutils() {
		HttpUtils httpUtils = new HttpUtils();
		httpUtils.download(path, getCacheDir().getPath() + "/1409aaaa.json",
				new RequestCallBack<File>() {

					@Override
					public void onSuccess(ResponseInfo<File> arg0) {/*

						File file = arg0.result;
						

				        FileInputStream fin =null;
				        FileOutputStream fout = null;
				        try{
				            fin = new FileInputStream(file);
				            fout = new FileOutputStream(getCacheDir().getPath() + "/12.json");
				            byte [] arr =new byte[1024];

				            while(true){
				            int temp = fin.read(arr,0,arr.length);
				                if(temp == -1){            //读取到末端返回-1
				                break;
				                }
				            fout.write(arr,0,temp);
				            }
				            
				        }catch(Exception e){
				            System.out.println(e);
				        }
				        finally{            //关掉流
				            try{
				                fout.close();
				                fin.close();
				            }catch(Exception e){
				                System.out.println(e);
				            }
				            
				        }
				    
					*/}

					@Override
					public void onFailure(HttpException arg0, String arg1) {
						// TODO Auto-generated method stub

					}
				});
	}

	protected void loadData() {
		HttpClient client = new DefaultHttpClient();

		HttpPost httpPost = new HttpPost(path);
		try {
			HttpResponse httpResponse = client.execute(httpPost);

			HttpEntity entity = httpResponse.getEntity();

			InputStream inputStream = entity.getContent();

			// getFileStreamPath(name);
			
			  BufferedReader bufferedReader = new BufferedReader( new
			  InputStreamReader(inputStream));
			

			BufferedWriter bufferedWriter = new BufferedWriter(
					new OutputStreamWriter(new FileOutputStream(getCacheDir()
							.getPath() + "/ccc.json", true)));
		

			/*String s;

			
			  while ((s = bufferedReader.readLine()) != null) {
			  
			  bufferedWriter.write(s);
			  
			 }*/
			
			/*byte[] buffer = new byte[10240];
			int i;
			while ((i = inputStream.read(buffer)) != -1) {

				bufferedWriter.write(new String(buffer));
			}*/

		
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

============================================================================================

package com.example.download;


/**
 * 
 */


import java.io.File;
import java.io.IOException;


import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.MemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.FIFOLimitedMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LargestLimitedMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LimitedAgeMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder;


import android.app.Application;
import android.widget.Toast;


/**
 * @author WJL
 * 
 */
public class MyApplication extends Application {
	private int maxMemory;


	@Override
	public void onCreate() {
		super.onCreate();
		System.out.println("MyApplication");
		
		maxMemory = ((int) Runtime.getRuntime().maxMemory()) / 1024 / 1024;
                  System.out.println("最大内存:"+maxMemory);
                  Toast.makeText(this, "   "+maxMemory, 0).show();
                  
         //初始ImageLoader
		initImageLoader();
                  
                  
	}


	/**
	 *           
         //初始ImageLoader
	 */
	@SuppressWarnings("deprecation")
	private void initImageLoader() {
		
		
		//得到ImageLoader实例
		ImageLoader imageLoader=ImageLoader.getInstance();
		
		//得到ImageLoader配置的建筑者对象
		ImageLoaderConfiguration.Builder builder=new Builder(this);
		
		//设置磁盘(sd卡)缓存的大小限制
//		builder.diskCacheSize(maxCacheSize);
		try {
			//设置磁盘(sd卡)缓存策略,参数一:缓存文件的路径,参数二:文件名的命名方法,有MD5,HashCode,参数三:缓存的最大内存
			builder.discCache(new LruDiskCache(new File("/storage/sdcard0/cache/"), new Md5FileNameGenerator(), 2*1024*1204));
			//设置磁盘(sd卡)缓存策略,限制缓存时间;参数一:缓存文件的路径,参数二:缓存文件的存活时间,系统当前时间-文件的最新修改时间 > maxAge
//			builder.discCache(new LimitedAgeDiskCache(cacheDir, maxAge) );
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		


		//设置内存缓存的大小限制,默认是最大内存的1/8
		builder.memoryCacheSize(maxMemory/8);
		
		//设置内存缓存策略                根据先进先出的原则上删除多余对象  LinkedList  参数一:设置的缓存内存大小
//		builder.memoryCache(new FIFOLimitedMemoryCache(sizeLimit));
		
		//设置内存缓存策略          先删除占内存最大的图片      HashMap    参数一:设置的缓存内存大小
//  	builder.memoryCache(new LargestLimitedMemoryCache(sizeLimit));
		
         //	   设置内存缓存策略    Lru算法   LinkedHashMap  最大的缓存大小
//		builder.memoryCache(new LruMemoryCache(maxSize))
		
		//设置内存缓存策略        最少被用到的对象会被删除      HashMap    参数一:设置的缓存内存大小
//		builder.memoryCache(new UsingFreqLimitedMemoryCache(sizeLimit))
		
		//设置内存缓存策略        最早被添加的对象会被删除     HashMap  参数一:MemoryCache对象   参数二:缓存失效的最大时间
//		builder.memoryCache(new LimitedAgeMemoryCache(cache, maxAge));
		
		
		//初始化imageLoader配置
		imageLoader.init(builder.build());
		
		
		
	/*	
		使用默认的缓存策略
		ImageLoader imageLoader2=ImageLoader.getInstance();
		ImageLoaderConfiguration.Builder configuration=new ImageLoaderConfiguration.Builder(this);
		imageLoader2.init(configuration.build());
		*/
	}


}

=================================

导包

universal-image-loader-1.9.5.jar

xUtils-2.6.14.jar


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值