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; } }