contance
public interface IContance {
abstract class IClaPresenter{
public abstract void clalist(HashMap<String,String>params);
}
interface IClaModel{
void clalist(HashMap<String,String>params, ClaModel.IClaModelCallBack callBack);
}
interface IClaView{
void success(String result);
void error(String msg);
}
}
model
public class ClaModel implements IContance.IClaModel {
@Override
public void clalist(HashMap<String, String> params, final IClaModelCallBack callBack) {
OkHttpUtils.getInstance().doGet(Api.HEADLINE, new OkHttpCallBack() {
@Override
public void success(String result) {
callBack.success(result);
}
@Override
public void error(String msg) {
callBack.error(msg);
}
});
}
public interface IClaModelCallBack{
void success(String result);
void error(String msg);
}
}
presenter
public class ClaPresenter extends IContance.IClaPresenter {
private IContance.IClaView iClaView;
private ClaModel claModel;
public ClaPresenter(IContance.IClaView iClaView) {
this.iClaView = iClaView;
claModel = new ClaModel();
}
@Override
public void clalist(HashMap<String, String> params) {
claModel.clalist(params, new ClaModel.IClaModelCallBack() {
@Override
public void success(String result) {
iClaView.success(result);
}
@Override
public void error(String msg) {
iClaView.error(msg);
}
});
}
}
OkHtpptCallBack 接口
public interface OkHttpCallBack {
void success(String result);
void error(String msg);
}
OkHttpUtils 类
public class OkHttpUtils {
private OkHttpClient okHttpClient;
private static OkHttpUtils mInstance;
private Handler handler = new Handler();
//单例模式
public static OkHttpUtils getInstance(){
if (mInstance==null){
synchronized (OkHttpUtils.class){
if (mInstance==null){
mInstance = new OkHttpUtils();
}
}
}
return mInstance;
}
//拦截器
public OkHttpUtils(){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.writeTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.build();
}
//doGet方法
public void doGet(String url,final OkHttpCallBack okHttpCallBack){
Request request = new Request.Builder().url(url).get().build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.error("网络异常");
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.code()==200){
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
okHttpCallBack.success(string);
}
});
}
}
});
}
//doPost
public void doPost(String url, HashMap<String,String>params, final OkHttpCallBack callBack){
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String,String>map:params.entrySet()){
builder.add(map.getKey(),map.getValue());
}
RequestBody requestBody = builder.build();
Request request = new Request.Builder().url(url).post(requestBody).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (callBack!=null){
handler.post(new Runnable() {
@Override
public void run() {
callBack.error("网络异常");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (callBack!=null){
if (response.code()==200){
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
callBack.success(string);
}
});
}
}
}
});
}
}
view
public class MyView extends View {
private Paint paint;
private int aax;
private int aay;
private int mRaduis=100;
public MyView(Context context) {
super(context);
init(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay();
canvas.drawCircle(aax,aay,mRaduis,paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
aax = (int) event.getX();
aay = (int) event.getY();
invalidate();
break;
}
return true;
}
}
Api
public class Api {
public static String HEADLINE="http://365jia.cn/news/api3/365jia/news/headline?page=1";
}
bean
public class UserBean {
public DataBeanX data;
public static class DataBeanX {
public List<DataBean> data;
public static class DataBean {
public int id;
public String title;
public List<String> pics;
}
}
}
adapter
public class HomeAdapter extends XRecyclerView.Adapter<HomeAdapter.Myvh> {
private Context context;
private List<UserBean.DataBeanX.DataBean> list;
private int ONE = 1;
private int TWO = 2;
public HomeAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setList(List<UserBean.DataBeanX.DataBean> list) {
this.list = list;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position%4==0){
return ONE;
}else {
return TWO;
}
}
@NonNull
@Override
public Myvh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Log.e("tag","hhhhhhhhhhhhhhhhhhhhhh");
if (viewType == ONE) {
View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
return new Myvh(view);
} else{
View view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
return new Myvh(view);
}
}
@Override
public void onBindViewHolder(@NonNull Myvh holder, int position) {
holder.title.setText(list.get(position).title);
Glide.with(context).load("http://365jia.cn/uploads/appletrecommend/201804/5ad6ba6c6bb8b.jpg").into(holder.imageView);
}
@Override
public int getItemCount() {
return list.size();
}
public class Myvh extends RecyclerView.ViewHolder {
private final TextView title;
private final ImageView imageView;
public Myvh(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title);
imageView = itemView.findViewById(R.id.image);
}
}
}
MainActivity
public class MainActivity extends AppCompatActivity implements ClaContrant.IclaView {
private XRecyclerView xRecyclerView;
private HomeAdapter homeAdapter;
private int page = 1;
private ClaPresenter claPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
xRecyclerView = findViewById(R.id.xrec);
xRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
homeAdapter = new HomeAdapter(MainActivity.this);
claPresenter = new ClaPresenter(this);
HashMap<String,String> params = new HashMap<>();
claPresenter.clalist(params);
}
@Override
public void success(String result) {
UserBean userBean = new Gson().fromJson(result, UserBean.class);
homeAdapter.setList(userBean.data.data);
xRecyclerView.setAdapter(homeAdapter);
}
@Override
public void failure(String msg) {
}
//解决内存泄漏
@Override
public void onDestroy() {
super.onDestroy();
claPresenter.destroy();
}
}