//UserApi
package mmy.example.com.zklx2_3.Api;
public class UserApi {
public static final String USER_API = "http://www.xieast.com/api/news/news.php";
}
//LoadContract
package mmy.example.com.zklx2_3.contract;
import java.util.HashMap;
import mmy.example.com.zklx2_3.net.RequestCallBack;
public interface LoadContract {
public abstract class Lloadpresenter{
public abstract void ppresenter(HashMap<String,String>map);
}
interface LloadModel{
void model(HashMap<String,String>map, RequestCallBack callBack);
}
interface LloadView{
void onSuccess(String result);
void onFailUre(String msg);
}
}
//LoadModel
package mmy.example.com.zklx2_3.model;
import android.os.Handler;
import java.util.HashMap;
import mmy.example.com.zklx2_3.Api.UserApi;
import mmy.example.com.zklx2_3.contract.LoadContract;
import mmy.example.com.zklx2_3.net.OkHttpCallback;
import mmy.example.com.zklx2_3.net.OkHttpUtile;
import mmy.example.com.zklx2_3.net.RequestCallBack;
public class LoadModel implements LoadContract.LloadModel {
private Handler handler = new Handler();
@Override
public void model(HashMap<String, String> map, final RequestCallBack callBack) {
OkHttpUtile.getmInsxcvczmn().doPost(UserApi.USER_API, map, new OkHttpCallback() {
@Override
public void onSuccess(final String result) {
if (callBack != null){
handler.post(new Runnable() {
@Override
public void run() {
callBack.onSuccess(result);
}
});
}
}
@Override
public void onFailUre(final String mag) {
if (callBack !=null){
handler.post(new Runnable() {
@Override
public void run() {
callBack.onFailUre(mag);
}
});
}
}
});
}
}
//OkHttpCallback
package mmy.example.com.zklx2_3.net;
public interface OkHttpCallback {
void onSuccess(String result);
void onFailUre(String mag);
}
//OkHttpUtile
package mmy.example.com.zklx2_3.net;
import android.os.Handler;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OkHttpUtile {
private Handler handler = new Handler();
private final OkHttpClient okHttpClient;
private static OkHttpUtile mInsxcvczmn;
public OkHttpUtile() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.writeTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.build();
}
public void doPost(String apiUre, HashMap<String, String> params, final OkHttpCallback okHttpCallback) {
FormBody.Builder formBody = new FormBody.Builder();
if (params !=null){
for (Map.Entry<String,String>p:params.entrySet()){
formBody.add(p.getKey(),p.getValue());
}
}
Request request = new Request.Builder().url(apiUre).post(formBody.build()).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (okHttpCallback != null){
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallback.onFailUre("网络异常");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String result = response.body().string();
int code = response.code();
if (200 == code){
if (okHttpCallback != null){
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallback.onSuccess(result);
}
});
}
}
}
});
}
public static OkHttpUtile getmInsxcvczmn(){
if (mInsxcvczmn == null){
synchronized (OkHttpUtile.class){
if (mInsxcvczmn == null){
mInsxcvczmn = new OkHttpUtile();
}
}
}
return mInsxcvczmn;
}
public void okhttpdsaxcz(){
if (okHttpClient !=null){
okHttpClient.dispatcher().cancelAll();
}
}
}
//RequestCallBack
package mmy.example.com.zklx2_3.net;
public interface RequestCallBack {
void onSuccess(String result);
void onFailUre(String msg);
}
//LoadPresenter
package mmy.example.com.zklx2_3.presenter;
import java.util.HashMap;
import mmy.example.com.zklx2_3.contract.LoadContract;
import mmy.example.com.zklx2_3.model.LoadModel;
import mmy.example.com.zklx2_3.net.RequestCallBack;
public class LoadPresenter extends LoadContract.Lloadpresenter{
private LoadContract.LloadView lloadView;
private LoadModel loadModel;
public LoadPresenter(LoadContract.LloadView lloadView) {
this.lloadView = lloadView;
loadModel = new LoadModel();
}
@Override
public void ppresenter(HashMap<String, String> map) {
loadModel.model(map, new RequestCallBack() {
@Override
public void onSuccess(String result) {
if (lloadView != null){
lloadView.onSuccess(result);
}
}
@Override
public void onFailUre(String msg) {
if (lloadView !=null){
lloadView.onFailUre(msg);
}
}
});
}
}
//MainActivity
package mmy.example.com.zklx2_3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.HashMap;
import mmy.example.com.zklx2_3.presenter.LoadPresenter;
public class MainActivity extends AppCompatActivity {
private XRecyclerView xRecyclerView;
private LoadPresenter loadPresenter;
private int page = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadPresenter = new LoadPresenter(this);
xRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
HashMap<String,String> map = new HashMap<>();
map.put("page","1");
loadPresenter.ppresenter(map);
xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
HashMap<String,String> map = new HashMap<>();
map.put("page","1");
loadPresenter.ppresenter(map);
xRecyclerView.refreshComplete();
}
@Override
public void onLoadMore() {
}
});
}
private void initView(){
xRecyclerView = (XRecyclerView) findViewById(R.id.xListView);
}
}
//Adapter
package mmy.example.com.zklx2_3.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
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.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
import java.util.List;
import mmy.example.com.zklx2_3.R;
import mmy.example.com.zklx2_3.bean.UserBean;
public class MyAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> {
public Context context;
public List<UserBean.DataBean> list;
public MyAdapter(Context context) {
this.context = context;
this.list = new ArrayList<>();
}
public void setList(List<UserBean.DataBean> list) {
if (list !=null){
this.list = list;
}
notifyDataSetChanged();
}
@NonNull
@Override
public XRecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.list_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull XRecyclerView.ViewHolder viewHolder, int i) {
UserBean.DataBean dataBean = list.get(i);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView price;
public TextView name;
public ImageView image;
public ViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
name = itemView.findViewById(R.id.name);
price = itemView.findViewById(R.id.price);
}
}
}
//布局
<?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=".MainActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/xListView"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>
</android.support.constraint.ConstraintLayout>
//条目
<?xml version="1.0" encoding="utf-8"?>
//