1. 程式人生 > >使用接口回調解析數據並下載網絡圖片

使用接口回調解析數據並下載網絡圖片

mode ntc content sep last con 取數據 struct while

package DemoBook;

import mode.CookBook;

public class Demobook {
	// 向網絡回去json數據,通過接口回調
	// gson解析數據
	// 依據pic圖片地址,下載圖片存入磁盤中
	// gson解析數據
	public static void main(String[] args) {
		String path = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";

		new DownLoadThread(path, new Mycallback() {

			@Override
			public void printCook(CookBook cb) {
				// 數據下載,而且解析完畢的
				System.out.println(cb);

			}
		}).start();

	}
}

package DemoBook;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import com.google.gson.Gson;

import mode.CookBook;
import mode.FoodMenu;

/*
 * 開啟線程,下載網絡數據
 * 
 */
public class DownLoadThread extends Thread {
	private String path;

	private Mycallback callBack;

	public DownLoadThread(String path, Mycallback callBack) {
		// TODO Auto-generated constructor stub
		this.path = path;
		this.callBack = callBack;
	}

	@Override
	public void run() {

		// 下載json數據
		String json = HttpUtil.getStringResultByOkHttp(path);
		// 解析數據
		CookBook cb = new Gson().fromJson(json, CookBook.class);

		// 得到FoodMenu
		ArrayList<FoodMenu> list = cb.getData();

		for (FoodMenu foodMenu : list) {
			String pic = foodMenu.getPic();

			byte[] data = HttpUtil.getByteResultByOkHttp(pic);

			String picName = pic.substring(pic.lastIndexOf("/") + 1);
			FileOutputStream fos = null;
			try {
				fos = new FileOutputStream("d:/cook/" + picName);
				fos.write(data);
				System.out.println(picName + "下載完畢");

			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally {
				if (fos != null) {
					try {
						fos.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}

		// 通過接口回調,將解析後的數據放回

		callBack.printCook(cb);

	}
}

package DemoBook;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class HttpUtil {

	/**
	 * 通過HttpConnection  的   Get方式獲取信息
	 * 
	 * @param path
	 *            請求地址
	 * @return byte[]
	 */
	public static byte[] getResult(String path) {
		HttpURLConnection conn = null;

		ByteArrayOutputStream baos = null;

		InputStream is = null;
		try {
			// 1, 得到URL對象
			URL url = new URL(path);

			// 2, 依據URL對象打開HttpUrlConnection對象
			conn = (HttpURLConnection) url.openConnection();

			// 3, 設置請求方式(能夠不寫, 默認"GET",能夠指定"POST",必須大寫 )
			conn.setRequestMethod("GET");
			// 連接
			conn.connect();

			baos = new ByteArrayOutputStream();

			// 4, 獲取響應
			if (conn.getResponseCode() == 200) {
				is = conn.getInputStream();

				byte[] buffer = new byte[1024];

				int len = 0;

				while ((len = is.read(buffer)) != -1) {

					baos.write(buffer, 0, len);
				}

				return baos.toByteArray();
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.disconnect();// 斷開連接
			}
			if (baos != null) {
				try {
					baos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (is != null) {
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		return null;
	}

	/**
	 * 通過HttpConnection  的   Get方式獲取信息
	 * @param path
	 * @return String
	 */
	public static String getResultStr(String path)
	{
		HttpURLConnection conn = null;
		InputStream is =null;
		BufferedReader br = null;
		String str = null;
		try {
			
			URL url = new URL(path);
			
			conn = (HttpURLConnection) url.openConnection();
			
			if(conn.getResponseCode()==200)
			{
				is = conn.getInputStream();
				
				br = new BufferedReader(new InputStreamReader(is));
				
				str = br.readLine();
				
				
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(conn!=null)
			{
				conn.disconnect();
			}
			if(is!=null)
			{
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(br!=null)
			{
				try {
					br.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		return str;
	}
	
	/**
	 * 通過HttpUrlConnection 的 post方式提交數據 , 獲取響應的信息
	 * 
	 * @param path  路徑
	 * @param data  參數     "useName=abc&usePwd=123"  沒有?
	 * @return String 
	 */
	public static String postData(String path,String data)
	{
		String str = null;
		HttpURLConnection conn = null;
		OutputStream os = null;
		InputStream is = null;
		BufferedReader br = null;
		
		try {
			URL url = new URL(path);
			
			conn = (HttpURLConnection)url.openConnection();
			
			conn.setRequestMethod("POST");
			
			conn.setDoOutput(true);
			
			 os = conn.getOutputStream();
			os.write(data.getBytes());
			os.flush();
			
			if(conn.getResponseCode() == 200)
			{
				is = conn.getInputStream();
				
				br = new BufferedReader(new InputStreamReader(is));
				
				str = br.readLine();
				
			}
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			if(conn!=null)
			{
				conn.disconnect();
			}
			if(os!=null)
			{
				try {
					os.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			if(is!=null)
			{
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			if(br!=null)
			{
				try {
					br.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
		
		
		return str;
	}
	
	/**
	 * 通過okHttp獲取數據
	 * 
	 * @param path
	 * @return byte[]
	 */
	public static byte[] getByteResultByOkHttp(String path)
	{
		byte[] data= null;
		
		try
		{
			
			OkHttpClient client = new OkHttpClient();
			
			Request request = new Request.Builder().url(path).build();

			// 請求數據,得到響應信息
			Response response = client.newCall(request).execute();

			if (response.isSuccessful()) {
				
				data = response.body().bytes();

				return data;
			}
			
		}catch(Exception exception)
		{
			exception.printStackTrace();
		}
		
		return data;
	}
	
	/**
	 *  通過okHttp獲取數據
	 * @param path
	 * @return String
	 */
	public static String getStringResultByOkHttp(String path)
	{
		String data= null;
		
		try
		{
			
			OkHttpClient client = new OkHttpClient();
			
			Request request = new Request.Builder().url(path).build();

			// 請求數據,得到響應信息
			Response response = client.newCall(request).execute();

			if (response.isSuccessful()) {
				
				data = response.body().string();

				return data;
			}
			
		}catch(Exception exception)
		{
			exception.printStackTrace();
		}
		
		return data;
	}
	
	/**
	 * 通過okHttp下載圖片, 接口回調的方式返回下載的結果
	 * @param path
	 * @param callBack
	 */

}

package DemoBook;

import mode.CookBook;

/**
 * 網絡下砸json的回調接口
 * @author Administrator
 *
 */
public interface Mycallback {

public void printCook(CookBook cb);
	

}

package mode;

import java.util.ArrayList;

public class CookBook {
private int ret;

private ArrayList<FoodMenu> data;

public int getRet() {
	return ret;
}

public void setRet(int ret) {
	this.ret = ret;
}

public ArrayList<FoodMenu> getData() {
	return data;
}

public void setData(ArrayList<FoodMenu> data) {
	this.data = data;
}

@Override
public String toString() {
	return "CookBook [ret=" + ret + ", data=" + data + "]";
}

public CookBook(int ret, ArrayList<FoodMenu> data) {
	super();
	this.ret = ret;
	this.data = data;
}


	
}

package mode;

public class FoodMenu {
private int id;
private String title;
private String  pic;
private String collect_num;
private String food_str;
private int num;
@Override
public String toString() {
	return "FoodMenu [id=" + id + ", title=" + title + ", pic=" + pic + ", collect_num=" + collect_num + ", food_str="
			+ food_str + ", num=" + num + "]";
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getTitle() {
	return title;
}
public void setTitle(String title) {
	this.title = title;
}
public String getPic() {
	return pic;
}
public void setPic(String pic) {
	this.pic = pic;
}
public String getCollect_num() {
	return collect_num;
}
public void setCollect_num(String collect_num) {
	this.collect_num = collect_num;
}
public String getFood_str() {
	return food_str;
}
public void setFood_str(String food_str) {
	this.food_str = food_str;
}
public int getNum() {
	return num;
}
public void setNum(int num) {
	this.num = num;
}
public FoodMenu(int id, String title, String pic, String collect_num, String food_str, int num) {
	super();
	this.id = id;
	this.title = title;
	this.pic = pic;
	this.collect_num = collect_num;
	this.food_str = food_str;
	this.num = num;
}


}

使用接口回調解析數據並下載網絡圖片