main|Okhttp网络请求

adapter包

MyAdapter




package adapter; import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bwie.okhttpdemotext.Main2Activity; import com.bwie.okhttpdemotext.R; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; import bean.Bean; /** * Created by 王爱诗 on 2017/10/25. */public class MyAdapter extends RecyclerView.Adapter { private Context context; privateList list; private OnItemListener onItemListener; public MyAdapter(Context context,List list){ this.context=context; this.list=list; } public interface OnItemListener{ public void onItemClick(Bean.DataBean dataBean); } public void setonItemListener(OnItemListener onItemListener){ this.onItemListener=onItemListener; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item,null); return new MyApter(view); }@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { MyApter holder1=(MyApter)holder; holder1.tv.setText(list.get(position).getOccupation()); holder1.tv1.setText(list.get(position).getIntroduction()); ImageLoader.getInstance().displayImage(list.get(position).getUserImg(),holder1.iv_urlimage); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(context, Main2Activity.class); intent.putExtra("title",list.get(position).getTitle()); intent.putExtra("url",list.get(position).getUrl()); context.startActivity(intent); } }); }@Override public int getItemCount() { return list.size(); } class MyApter extends RecyclerView.ViewHolder{ private TextView tv,tv1; private final ImageView iv_urlimage; public MyApter(View itemView) { super(itemView); tv= itemView.findViewById(R.id.tv); tv1= itemView.findViewById(R.id.tv1); iv_urlimage = itemView.findViewById(R.id.iv_urlimage); } } }bean包


BaseBean


package bean; public class BaseBean { public int code; public int getCode() { return code; }public void setCode(int code) { this.code = code; } }


Bean
package bean; import java.util.List; /** * Created by 王爱诗 on 2017/10/25. */public class Bean extends BaseBean{// private int code; private boolean success; private int width; private int height; private Object message; private List data; //public int getCode() { //return code; //} // //public void setCode(int code) { //this.code = code; //}public boolean isSuccess() { return success; }public void setSuccess(boolean success) { this.success = success; }public int getWidth() { return width; }public void setWidth(int width) { this.width = width; }public int getHeight() { return height; }public void setHeight(int height) { this.height = height; }public Object getMessage() { return message; }public void setMessage(Object message) { this.message = message; }public List getData() { return data; }public void setData(List data) { this.data = https://www.it610.com/article/data; }public static class DataBean {private String userImg; private int impressEditId; private int impressType; private String occupation; private String url; private long createTime; private String hxKey; private String img; private String yulin; private String introduction; private int replyTimes; private String remark; private int click; private long topTime; private int recommend; private int userAge; private int star; private String title; private int source; private String userName; private int reporter; private int status; private String content; public String getUserImg() { return userImg; }public void setUserImg(String userImg) { this.userImg = userImg; }public int getImpressEditId() { return impressEditId; }public void setImpressEditId(int impressEditId) { this.impressEditId = impressEditId; }public int getImpressType() { return impressType; }public void setImpressType(int impressType) { this.impressType = impressType; }public String getOccupation() { return occupation; }public void setOccupation(String occupation) { this.occupation = occupation; }public String getUrl() { return url; }public void setUrl(String url) { this.url = url; }public long getCreateTime() { return createTime; }public void setCreateTime(long createTime) { this.createTime = createTime; }public String getHxKey() { return hxKey; }public void setHxKey(String hxKey) { this.hxKey = hxKey; }public String getImg() { return img; }public void setImg(String img) { this.img = img; }public String getYulin() { return yulin; }public void setYulin(String yulin) { this.yulin = yulin; }public String getIntroduction() { return introduction; }public void setIntroduction(String introduction) { this.introduction = introduction; }public int getReplyTimes() { return replyTimes; }public void setReplyTimes(int replyTimes) { this.replyTimes = replyTimes; }public String getRemark() { return remark; }public void setRemark(String remark) { this.remark = remark; }public int getClick() { return click; }public void setClick(int click) { this.click = click; }public long getTopTime() { return topTime; }public void setTopTime(long topTime) { this.topTime = topTime; }public int getRecommend() { return recommend; }public void setRecommend(int recommend) { this.recommend = recommend; }public int getUserAge() { return userAge; }public void setUserAge(int userAge) { this.userAge = userAge; }public int getStar() { return star; }public void setStar(int star) { this.star = star; }public String getTitle() { return title; }public void setTitle(String title) { this.title = title; }public int getSource() { return source; }public void setSource(int source) { this.source = source; }public String getUserName() { return userName; }public void setUserName(String userName) { this.userName = userName; }public int getReporter() { return reporter; }public void setReporter(int reporter) { this.reporter = reporter; }public int getStatus() { return status; }public void setStatus(int status) { this.status = status; }public String getContent() { return content; }public void setContent(String content) { this.content = content; } } }


Main包
Main2Activity

package com.bwie.okhttpdemotext; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class Main2Activity extends AppCompatActivity {private WebView wv; private String url; private String title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); initView(); initDate(); }private void initDate() { Intent intent = getIntent(); title = intent.getStringExtra("title"); url = intent.getStringExtra("url"); setTitle(title); Toast.makeText(Main2Activity.this,"Url的值是+++++++++++++++++"+ url,Toast.LENGTH_SHORT).show(); wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); wv.getSettings().setJavaScriptEnabled(true); wv.getSettings().setSupportZoom(false); wv.getSettings().setBlockNetworkLoads(true); wv.getSettings().setBlockNetworkImage(true); wv.setWebChromeClient(new WebChromeClient()); wv.setWebViewClient(new WebViewClient()); /* if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) { wv.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); }*/runOnUiThread(new Runnable() { @Override public void run() { wv.loadUrl(url); } }); }private void initView() { wv = (WebView) findViewById(R.id.wv); } }




BaseActivity



package com.bwie.okhttpdemotext; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import net.HttpUtil; import java.util.LinkedList; /** * Created by peng on 2017/9/27. */public class BaseActivity extends AppCompatActivity { private LinkedList list = new LinkedList<>(); protected HttpUtil httpUtil; private ProgressDialog dialog; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); list.add(this); httpUtil = HttpUtil.getInstance(this); }public void finshAll() { for (Activity ac : list) { if (!ac.isFinishing()) { ac.finish(); } } }/** * 显示进度条 */ protected void showPd() { dialog = new ProgressDialog(this); dialog.setMessage("正在加載..."); dialog.show(); }/** * 关闭进度条 */ protected void dismissPd(){ if (dialog!=null && !this.isFinishing()){ dialog.dismiss(); } } }


MainActivity

package com.bwie.okhttpdemotext; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import net.OnNetListener; import java.io.IOException; import adapter.MyAdapter; import bean.BaseBean; import bean.Bean; public class MainActivity extends BaseActivity { private String url="http://www.yulin520.com/a2a/impressApi/news/mergeList?sign=C7548DE604BCB8A17592EFB9006F9265&pageSize=20&gender=2&ts=1871746850&page=1"; private RecyclerView recyc; private MyAdapter adpter; //private List list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyc=(RecyclerView)findViewById(R.id.recyc); httpUtil.doGet(url, Bean.class, new OnNetListener() { @Override public void onSuccess(BaseBean baseBean) throws IOException { Bean bean= (Bean) baseBean; //list=bean.getData(); adpter = new MyAdapter(MainActivity.this,bean.getData()); LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this); recyc.setLayoutManager(linearLayoutManager); recyc.setAdapter(adpter); }@Override public void onError(IOException e) {} }); DisplayImageOptions options=new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .build(); ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(this) .defaultDisplayImageOptions(options) .build(); ImageLoader.getInstance().init(config); /* httpUtil.doPost(url, null, Bean.class, new OnNetListener() { @Override public void onSuccess(BaseBean baseBean) throws IOException { Bean bean= (Bean) baseBean; MyAdpter adpter = new MyAdpter(MainActivity.this,bean.getData()); LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this); recyc.setLayoutManager(linearLayoutManager); recyc.setAdapter(adpter); } @Override public void onError(IOException e) {} }); */ } }

net包

BaseNetListener

package net; import java.io.IOException; import bean.BaseBean; public class BaseNetListener implements OnNetListener {@Override public void onSuccess(BaseBean baseBean) throws IOException {}@Override public void onError(IOException e) {} }



HttpUtil
package net; import android.content.Context; import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.widget.Toast; import com.google.gson.Gson; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import bean.BaseBean; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; ; /** * Created by peng on 2017/9/27. */public class HttpUtil { privatestatic HttpUtil httpUtil; private final OkHttpClient client; private Context context; private Handler handler = new Handler(Looper.getMainLooper()); private HttpUtil(Context context) { //缓存目录 File sdcache = new File(Environment.getExternalStorageDirectory(), "cache"); int cacheSize = 10 * 1024 * 1024; HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); client = new OkHttpClient.Builder() .addInterceptor(logging) //.addNetworkInterceptor(new CacheInterceptor()) //.writeTimeout(20, TimeUnit.SECONDS) //.readTimeout(20, TimeUnit.SECONDS) //.cache(new Cache(sdcache,cacheSize)) .build(); this.context = context; }public static HttpUtil getInstance(Context context) { if (httpUtil == null) { synchronized (HttpUtil.class) { if (httpUtil == null) { httpUtil = new HttpUtil(context); } } } return httpUtil; }public void doPost(String url, Map params, final Class clazz, final OnNetListener onNetListener) { //网络判断 if (!NetWorkUtil.isNetworkAvailable(context)) { Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show(); return; } if (params != null && params.size() > 0) { FormBody.Builder builder = new FormBody.Builder(); params.put("client", "android"); for (Map.Entry entry : params.entrySet()) { builder.add(entry.getKey(), entry.getValue()); } FormBody formBody = builder.build(); final Request request = new Request.Builder().url(url).post(formBody).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, Response response) throws IOException { final BaseBean baseBean = (BaseBean) new Gson().fromJson(response.body().string(), clazz); int code = baseBean.getCode(); handler.post(new Runnable() { @Override public void run() { try { onNetListener.onSuccess(baseBean); } catch (IOException e) { e.printStackTrace(); } } }); } }); }}public void download(String url, Callback callback) { Request request = new Request.Builder().url(url).build(); client.newCall(request).enqueue(callback); }public void doGet(String url, final Class clazz, final OnNetListener onNetListener) { //网络判断 if (!NetWorkUtil.isNetworkAvailable(context)) { Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show(); return; } Request.Builder builder = new Request.Builder(); builder.url(url); final Request request = builder.build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { onNetListener.onError(e); } }); }@Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); // final BaseBean baseBean = (BaseBean) new Gson().fromJson(string, clazz); final BaseBean baseBean = (BaseBean) new Gson().fromJson(string, clazz); int code = baseBean.getCode(); if (code == 1) { handler.post(new Runnable() { @Override public void run() { try { onNetListener.onSuccess(baseBean); } catch (IOException e) { e.printStackTrace(); } } }); } else if (code == 400) {} else if (code == 300) {} } }); }/** * @param url * @param params * @param header * @param clazz * @param onNetListener */ public void doGet(String url, HashMap params, HashMap header, final Class clazz, final OnNetListener onNetListener) {//网络判断 if (!NetWorkUtil.isNetworkAvailable(context)) { Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show(); return; }Request.Builder builder = new Request.Builder(); if (params != null && params.size() > 0) { StringBuilder sb = new StringBuilder(); for (Map.Entry entry : params.entrySet()) { sb.append(url); sb.append("?"); sb.append(entry.getKey()); sb.append("="); sb.append(entry.getValue()); } url = sb.toString(); } builder.url(url); //添加请求头 if (params != null && header.size() > 0) { for (Map.Entry entry : params.entrySet()) { builder.addHeader(entry.getKey(), entry.getValue()); } } final Request request = builder.build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { onNetListener.onError(e); } }); }@Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); final BaseBean baseBean = (BaseBean) new Gson().fromJson(string, clazz); int code = baseBean.getCode(); if (code == 200) { handler.post(new Runnable() { @Override public void run() { try { onNetListener.onSuccess(baseBean); } catch (IOException e) { e.printStackTrace(); } } }); } else if (code == 400) {} else if (code == 300) {} } }); }/** * 上传 * * @param url * @param fileName */ public void uploadFile(String url, String fileName) { String file = Environment.getExternalStorageState() + "/" + fileName; RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file); //创建RequestBody 设置类型等 RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("file", fileName, fileBody).build(); Request request = new Request.Builder().url(url).post(requestBody).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, Response response) throws IOException {} }); }/** * 下载 * * @param url */ public void download(String url) { Request request = new Request.Builder().url(url).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, Response response) throws IOException {} }); } }

NetWorkUtil

package net; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; /** * Created by peng on 2017/9/27. */public class NetWorkUtil { // check all network connect, WIFI or mobile public static boolean isNetworkAvailable(final Context context){ boolean hasWifoCon = false; boolean hasMobileCon = false; ConnectivityManager cm = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE); NetworkInfo[] networkInfo = cm.getAllNetworkInfo(); for (NetworkInfo net:networkInfo){ String typeName = net.getTypeName(); if(typeName.equalsIgnoreCase("WIFI")){ if(net.isConnected()){ hasWifoCon=true; } } if(typeName.equalsIgnoreCase("MOBILE")){ if(net.isConnected()){ hasWifoCon=true; } } } return hasWifoCon || hasMobileCon; }}


OkhttpUtils
package net; import android.os.Environment; import android.os.Handler; import android.os.Looper; import java.io.IOException; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; /** * Created by peng on 2017/10/11. * 使用懒汉式创建该对象,并保证线程安全 */public class OkHttpUtils implements IHttpListener { private static OkHttpUtils okHttpUtils; private final OkHttpClient httpClient; private final Handler handler; //构造方法私有化 private OkHttpUtils() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BASIC); httpClient = new OkHttpClient.Builder() .addInterceptor(logging) .build(); handler = new Handler(Looper.getMainLooper()); }public static OkHttpUtils getInstance() { if (okHttpUtils == null) { synchronized (OkHttpUtils.class) { if (okHttpUtils == null) { okHttpUtils = new OkHttpUtils(); } } } return okHttpUtils; }/** * post请求 * * @param url * @param params * @param clazz * @param onNetListener */ public void doPost(String url, Map params, Class clazz, OnNetListener onNetListener) {FormBody.Builder builder = new FormBody.Builder(); for (Map.Entry entry : params.entrySet()) { builder.add(entry.getKey(), entry.getValue()); } FormBody formBody = builder.build(); Request request = new Request.Builder().url(url).post(formBody).build(); httpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, Response response) throws IOException {} }); }public void doGet(String url, Class clazz, OnNetListener onNetListener) { Request request = new Request.Builder() .url(url) .build(); httpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, final Response response) throws IOException { handler.post(new Runnable() { @Override public void run() { //onNetListener.onSuccess(); } }); } }); }public void uploadFile(String url, String fileName) { String file = Environment.getExternalStorageState() + "/" + fileName; RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file); //创建RequestBody 设置类型等 RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("file", fileName, fileBody).build(); Request request = new Request.Builder().url(url).post(requestBody).build(); httpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, Response response) throws IOException {} }); }public void download(String url) { Request request = new Request.Builder().url(url).build(); httpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, Response response) throws IOException {} }); } }


OnNetListener

package net; import java.io.IOException; import bean.BaseBean; /** * Created by peng on 2017/9/27. */public interface OnNetListener { public void onSuccess(BaseBean baseBean) throws IOException; public void onError(IOException e); }


布局main

布局main2


布局item1


权限


依赖
compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.2' compile 'com.squareup.okhttp3:logging-interceptor:3.9.0' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'



【main|Okhttp网络请求】

    推荐阅读