网络请求----简单框架使用------(百度图片下载实例)
2015-04-11 19:27
771 查看
1,Net网络请求类
2,百度的图片的获取
这里用了recyclerview的serlayoutmanager,布局管理器是:new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
百度图片的接口:http://image.baidu.com/i?tn=resultjson_com&word=“+word+”&rn=10&pn=”+page*20
package com.example.mylibrary; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.util.Log; 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.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** * Created by alien on 2015/4/9. */ public class Net { static Net instance; private Net(){}; public static Net getInstance(){ if(instance==null){ instance=new Net(); } return instance; } public interface CallBack{ void onCallBack(String result); } public interface BitmapCallBack{ void onBitmapCallBack(Bitmap bitmap); } //get请求:这里的请求参数必须写在string url里面,通过URL realurl=new URL(url);来访问地址 public void netGet(final String url ,final Map<String,String> params,final CallBack callBack){ final Handler handler=new Handler(); new Thread(new Runnable() { @Override public void run() { try { String requestData=""; if(params==null){ requestData=url; } if(params!=null){ requestData=url+"?"; for(Entry<String,String> entry:params.entrySet()){ requestData+=URLEncoder.encode(entry.getKey(),"UTF-8")+ "="+URLEncoder.encode(entry.getValue(),"UTF-8")+"&"; } } URL realurl=new URL(requestData); HttpURLConnection connection= (HttpURLConnection) realurl.openConnection(); //貌似默认的是get请求 connection.setRequestMethod("GET"); //获取输入流(inputstream和outputstream是其他字节流的父类(抽象类)是不能直接new的 // 必须继承他,实例化它的子类) InputStream in=connection.getInputStream(); ByteArrayOutputStream out=new ByteArrayOutputStream(); int a=0; byte[] bytes=new byte[1024*20]; while ((a=in.read(bytes))!=-1){ out.write(bytes,0,a); } in.close(); out.flush(); out.close(); //toByteArray:返回这个流的当前内容作为一个字节数组。 final String result=new String(out.toByteArray()); handler.post(new Runnable() { @Override public void run() { callBack.onCallBack(result); } }); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } //post请求,这里的请求参数需要方法对应的输出流里面去请求网络(httpurlconnection)对应的outputstream public void netPost(final String url, final Map<String,String> params, final CallBack callBack){ final Handler handler=new Handler(); new Thread(new Runnable() { @Override public void run() { try{ InputStream in = null; URL realurl = null; String result = null; String requestData=""; HttpURLConnection conn = null; realurl = new URL(url); conn = (HttpURLConnection)realurl.openConnection(); //post请求必须设置为true这下面的两个 conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); if(params!=null){ for(Entry<String,String> entry:params.entrySet()){ requestData+= "&"+ URLEncoder.encode(entry.getKey(),"UTF-8") +"=" + URLEncoder.encode(entry.getValue(),"UTF-8"); } } //取出网络对应的输出流,这里转化为了字符流 PrintWriter pw = new PrintWriter(conn.getOutputStream()); pw.print(requestData); pw.flush(); pw.close(); // //这里也可以不转化为字符流,直接写出字节流 // OutputStream out=conn.getOutputStream(); // out.write(requestData.getBytes()); //获取对应的输入流,然后取到返回的数据 in = conn.getInputStream(); BufferedReader bin = new BufferedReader( new InputStreamReader(in)); String line; while ((line = bin.readLine()) != null) { result += line; } in.close(); final String finalResult = result; handler.post(new Runnable() { @Override public void run() { //这里通过回调去处理返回的数据 callBack.onCallBack(finalResult); } }); }catch(Exception eio){ eio.printStackTrace(); } } }).start(); } public void netBitmap(final String url, final BitmapCallBack callBack){ final Handler handler=new Handler(); new Thread(new Runnable() { @Override public void run() { URL realurl = null; try { realurl = new URL(url); HttpURLConnection connection = (HttpURLConnection) realurl.openConnection(); //貌似默认的是get请求 connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); //获取输入流(inputstream和outputstream是其他字节流的父类(抽象类)是不能直接new的 // 必须继承他,实例化它的子类) InputStream in = connection.getInputStream(); final Bitmap bitmap = BitmapFactory.decodeStream(in); in.close(); handler.post(new Runnable() { @Override public void run() { callBack.onBitmapCallBack(bitmap); } }); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
2,百度的图片的获取
package com.example.downloadimg; import android.content.Context; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import com.example.mylibrary.Net; import com.google.gson.Gson; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; /** * Created by alien on 2015/4/10. */ public class SearchImgActivity extends ActionBarActivity{ private RecyclerView mRecyclerView; private EditText searchkey; private ImageView img; private List<ResponseData> responseDataList=new ArrayList<>(); private MyAdapter adapter=new MyAdapter(); private String url; private int page=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.searchimg_activity); initview(); mRecyclerView.setAdapter(adapter); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { page=0; responseDataList.removeAll(responseDataList); requestData(); } }); } private void initview(){ mRecyclerView= (RecyclerView) findViewById(R.id.recyclerview); mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); searchkey= (EditText) findViewById(R.id.search_key); img= (ImageView) findViewById(R.id.img_search); } public void requestData(){ try { String word=URLEncoder.encode(searchkey.getText().toString(),"GBK"); url="http://image.baidu.com/i?tn=resultjson_com&word="+word+"&rn=10&pn="+page*20; Log.i("test","url------------"+url); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } Net.getInstance().netGet(url,null,new Net.CallBack() { @Override public void onCallBack(String result) { Log.i("test",result); Gson gson=new Gson(); Data datas=gson.fromJson(result,Data.class); Log.i("test","数组------"+datas.data.length); if(datas!=null){ for(int i=0;i<datas.data.length;i++){ ResponseData responseData=datas.data[i]; responseDataList.add(responseData); } } } }); } class MyAdapter extends RecyclerView.Adapter{ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) { LayoutInflater inflater=LayoutInflater.from(SearchImgActivity.this); View item=inflater.inflate(R.layout.recyclerview_img,viewGroup,false); ImageViewHolder holder=new ImageViewHolder(item); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { ((ImageViewHolder)viewHolder).setData(responseDataList.get(position)); if((position+1)%11==0){ page++; requestData(); Log.i("test","page-----"+page); } Log.i("test","position------"+position); } @Override public int getItemCount() { Log.i("test","长度---"+responseDataList.size()+""); return responseDataList.size(); } class ImageViewHolder extends RecyclerView.ViewHolder{ private ImageView item_img; WindowManager manager= (WindowManager) getSystemService(Context.WINDOW_SERVICE); final int width=manager.getDefaultDisplay().getWidth(); public ImageViewHolder(View itemView) { super(itemView); item_img= (ImageView) itemView.findViewById(R.id.item_img); } public void setData(final ResponseData data){ float percentage=(float)data.height/data.width; item_img.setLayoutParams(new LinearLayout.LayoutParams(width/2,(int) (percentage*width/2))); item_img.setImageBitmap(null); Net.getInstance().netBitmap(data.thumbURL,new Net.BitmapCallBack() { @Override public void onBitmapCallBack(Bitmap bitmap) { item_img.setImageBitmap(bitmap); } }); } } } //json解析数据格式 private class ResponseData{ private String fromPageTitle,type,filesize,currentIndex,thumbURL; private int width,height,pageNum; public ResponseData(String fromPageTitle,String type,String currentIndex,String thumbURL, String filesize, int pageNum ,int width,int height ){ this.thumbURL=thumbURL; this.currentIndex=currentIndex; this.filesize=filesize; this.fromPageTitle=fromPageTitle; this.height=height; this.width=width; this.pageNum=pageNum; this.type=type; } } private class Data{ private ResponseData[] data; public Data(ResponseData[] data){ this.data=data; } } }
这里用了recyclerview的serlayoutmanager,布局管理器是:new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
百度图片的接口:http://image.baidu.com/i?tn=resultjson_com&word=“+word+”&rn=10&pn=”+page*20
相关文章推荐
- android Volley请求框架的简单使用——访问网络和加载图片
- 请求网络图片缓存到本地 ,还有一些现成的图片加载框架的使用 Ace网络篇(一)
- Android UI-开源框架ImageLoader完美使用+listview加载网络图片与下载
- 使用Okhttp网络请求下载图片到指定文件夹
- okhttp网络请求框架的简单使用
- Android网络请求框架:Volley简单使用
- Android使用OKHTTP网络框架请求数据,RecyclerView结合Glide展示图片,瀑布流布局样式
- Retrofit网络请求框架的简单使用
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序
- Android网络请求框架:Android-async-http简单使用
- PHP使用七牛云存储之图片的上传、下载、303重定向教程,CI框架实例
- Android使用OkHttp框架下载网络图片
- 用Facebook开源框架Frescok加载网络图片的简单使用
- Android 中网络图片加载(包括本地图片的加载) 框架 universal image loader 的简单使用
- Android 网络请求框架android-async-http简单使用
- Android中AsyncTask的简单用法及实现网络图片下载的实例
- 使用Retrofit+RxJava搭建简单的MVP网络请求框架
- PHP使用七牛云存储之图片的上传、下载、303重定向教程,CI框架实例
- 使用okhttp进行图片下载,上传,get,post网络请求
- 网络请求框架 okhttp 简单的使用总结(一)