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; private List 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; } }
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 Listdata; // 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 = 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; } } }
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 LinkedListlist = 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 Listnet包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) { } });*/ } }
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) { } }
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 { private static 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, Mapparams, 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; } }
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, Mapparams, 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 { } }); } }
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); }
xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.okhttpdemotext.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyc" android:layout_width="match_parent" android:layout_height="match_parent"> android.support.v7.widget.RecyclerView> android.support.constraint.ConstraintLayout>布局main2
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.okhttpdemotext.Main2Activity"> <WebView android:id="@+id/wv" android:layout_width="match_parent" android:layout_height="match_parent">WebView> LinearLayout>
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_urlimage" android:layout_width="match_parent" android:layout_height="250dp" android:scaleType="centerCrop" /> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv1" android:layout_width="match_parent" android:layout_height="wrap_content" /> LinearLayout>权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
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'