Api
`package com.bawie.xiejiaqi.api;
public class GoodsApi {
public static final String public static final String LeftApi=“http://172.17.8.100/small/commodity/v1/findFirstCategory”;
public static final String RightApi=“http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?page=1&count=10&keyword=”;
}
`
左bean
package com.bawie.xiejiaqi.bean;
import java.util.List;
public class GoodsBean {
public List<Date> result;
public String message;
public String status;
public class Date{
public int id;
public String name;
}
}
右bean
package com.bawei.jiejiaqi0301mn.bean;
import java.util.List;
public class RightBean {
public List<ResultEntity> result;
private String message;
private String status;
public List<ResultEntity> getResult() {
return result;
}
public String getMessage() {
return message;
}
public String getStatus() {
return status;
}
public void setResult(List<ResultEntity> result) {
this.result = result;
}
public void setMessage(String message) {
this.message = message;
}
public void setStatus(String status) {
this.status = status;
}
public class ResultEntity{
public String commodityName;
public String masterPic;
public String getCommodityName() {
return commodityName;
}
public String getMasterPic() {
return masterPic;
}
public void setCommodityName(String commodityName) {
this.commodityName = commodityName;
}
public void setMasterPic(String masterPic) {
this.masterPic = masterPic;
}
}
}
CallBack
package com.bawie.xiejiaqi.callback;
public interface GoodsCallback {
void onSuccess(String resullt);
void onFilure(String msg);
}
Contract
package com.bawie.xiejiaqi.contract;
import com.bawie.xiejiaqi.callback.GoodsCallback;
import java.util.HashMap;
public interface GoodsContract {
interface IModle{
void leftModle(HashMap<String,String> map, GoodsCallback goodsCallback);
void rightModle(HashMap<String,String> map, GoodsCallback goodsCallback);
}
interface IView{
void leftOnSuccess(String resullt);
void leftOnFilure(String msg);
void rightOnSuccess(String resullt);
void rightOnFilure(String msg);
}
abstract class IPresenter{
public abstract void leftPresenter(HashMap<String,String> map);
public abstract void rightPresenter(HashMap<String,String> map);
}
}
Modle
package com.bawei.jiejiaqi0301mn.modle;
import android.os.Handler;
import com.bawei.jiejiaqi0301mn.api.Api;
import com.bawei.jiejiaqi0301mn.callback.GoodsCallBack;
import com.bawei.jiejiaqi0301mn.contract.GoodsContract;
import com.bawei.jiejiaqi0301mn.utils.OkHttpUtils;
import java.util.HashMap;
import java.util.Map;
public class GoodsModle implements GoodsContract.IModle{
private Handler handler = new Handler();
private String key;
private String value;
@Override
public void leftModle(HashMap<String, String> map, final GoodsCallBack goodsCallBack) {
OkHttpUtils.getInstance().goGet(Api.LeftApi, new GoodsCallBack() {
@Override
public void onSuccess(final String result) {
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onSuccess(result);
}
});
}
@Override
public void onFilure(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onFilure(msg);
}
});
}
});
}
@Override
public void rightModle(HashMap<String, String> map, final GoodsCallBack goodsCallBack) {
for (Map.Entry<String,String>params:map.entrySet()){
key = params.getKey();
value = params.getValue();
}
String s = Api.RightApi + value;
OkHttpUtils.getInstance().goGet(s, new GoodsCallBack() {
@Override
public void onSuccess(final String result) {
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onSuccess(result);
}
});
}
@Override
public void onFilure(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onFilure(msg);
}
});
}
});
}
}
presenter
package com.bawie.xiejiaqi.presenter;
import com.bawie.xiejiaqi.callback.GoodsCallback;
import com.bawie.xiejiaqi.contract.GoodsContract;
import com.bawie.xiejiaqi.modle.GoodsModle;
import java.util.HashMap;
public class GoodsPresenter extends GoodsContract.IPresenter{
private GoodsModle goodsModle;
private GoodsContract.IView iView;
public GoodsPresenter(GoodsContract.IView iView) {
this.iView = iView;
this.goodsModle = new GoodsModle();
}
@Override
public void leftPresenter(HashMap<String, String> map) {
goodsModle.leftModle(map, new GoodsCallback() {
@Override
public void onSuccess(String resullt) {
if (iView != null){
iView.leftOnSuccess(resullt);
}
}
@Override
public void onFilure(String msg) {
if (iView != null){
iView.leftOnFilure(msg);
}
}
});
}
@Override
public void rightPresenter(HashMap<String, String> map) {
goodsModle.rightModle(map, new GoodsCallback() {
@Override
public void onSuccess(String resullt) {
if (iView != null){
iView.rightOnSuccess(resullt);
}
}
@Override
public void onFilure(String msg) {
if (iView != null){
iView.rightOnFilure(msg);
}
}
});
}
}
utils
package com.bawei.jiejiaqi0301mn.utils;
import android.os.Handler;
import com.bawei.jiejiaqi0301mn.bean.LeftBean;
import com.bawei.jiejiaqi0301mn.callback.GoodsCallBack;
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.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OkHttpUtils {
private static OkHttpUtils okHttpUtils;
private final OkHttpClient okHttpClient;
private Handler handler = new Handler();
private OkHttpUtils(){
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.writeTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.build();
}
public static OkHttpUtils getInstance(){
if (okHttpUtils == null){
synchronized (LeftBean.class){
if(okHttpUtils == null){
okHttpUtils = new OkHttpUtils();
}
}
}
return okHttpUtils;
}
public void dopost(String url, HashMap<String,String> map, final GoodsCallBack goodsCallBack){
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String,String> p:map.entrySet()){
builder.add(p.getKey(),p.getValue());
}
RequestBody requestBody = builder.build();
Request build = new Request.Builder()
.url(url)
.post(requestBody)
.build();
okHttpClient.newCall(build).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (goodsCallBack != null){
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onFilure("网络异常");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onSuccess(string);
}
});
}
});
}
public void goGet(String url, final GoodsCallBack goodsCallBack){
final Request request = new Request.Builder()
.url(url)
.get()
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onFilure("网络异常");
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
goodsCallBack.onSuccess(string);
}
});
}
});
}
public void finish(){
if (okHttpClient != null){
okHttpClient.dispatcher().cancelAll();
}
}
}
MainActivity
package com.bawei.jiejiaqi0301mn;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.bawei.jiejiaqi0301mn.adapter.LeftAdapter;
import com.bawei.jiejiaqi0301mn.adapter.RightAdapter;
import com.bawei.jiejiaqi0301mn.bean.LeftBean;
import com.bawei.jiejiaqi0301mn.bean.RightBean;
import com.bawei.jiejiaqi0301mn.contract.GoodsContract;
import com.bawei.jiejiaqi0301mn.presenter.GoodsPresenter;
import com.google.gson.Gson;
import com.jwkj.libzxing.OnQRCodeScanCallback;
import com.jwkj.libzxing.QRCodeManager;
import com.umeng.socialize.editorpage.ShareActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Main2Activity extends AppCompatActivity implements GoodsContract.IView,LeftAdapter.OnItemClickListener{
private RecyclerView rv1,rv2;
private List<LeftBean.ResultEntity> list;
private List<RightBean.ResultEntity> list1;
GoodsPresenter goodsPresenter = null;
private LeftAdapter leftAdapter;
private RightAdapter rightAdapter;
private Views views;
private Button ss;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
initData();
rv1.setLayoutManager(new LinearLayoutManager(this));
rv2.setLayoutManager(new GridLayoutManager(this,2));
goodsPresenter = new GoodsPresenter(this);
goodsPresenter.leftPresenter(new HashMap<String, String>());
final HashMap<String, String> hashMap = new HashMap<>();
leftAdapter.setOnItemClickListener(this);
hashMap.put("keyword","鞋");
goodsPresenter.rightPresenter(hashMap);
views.ss.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = views.et1.getText().toString();
HashMap<String,String> hashMap1 = new HashMap<>();
hashMap1.put("keyword",s);
goodsPresenter.rightPresenter(hashMap1);
}
});
views.bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
QRCodeManager.getInstance()
.with(Main2Activity.this)
.setReqeustType(1)
.scanningQRCode(new OnQRCodeScanCallback() {
@Override
public void onCompleted(String result) {
Toast.makeText(Main2Activity.this, "结果:" + result, Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable errorMsg) {
Toast.makeText(Main2Activity.this, "扫描错误"+errorMsg.toString(),Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(Main2Activity.this, "扫描任务取消了", Toast.LENGTH_SHORT).show();
}
});
}
});
}
private void initData() {
list = new ArrayList<>();
list1 = new ArrayList<>();
leftAdapter = new LeftAdapter(this);
rightAdapter = new RightAdapter(this);
}
private void initView() {
rv1 = findViewById(R.id.rv1);
rv2 = findViewById(R.id.rv2);
views = findViewById(R.id.views);
ss = findViewById(R.id.ss);
}
@Override
public void leftOnSuccess(String result) {
LeftBean leftBean = new Gson().fromJson(result, LeftBean.class);
if (leftBean != null){
leftAdapter = new LeftAdapter(this);
leftAdapter.setList(leftBean.result);
leftAdapter.setOnItemClickListener(this);
rv1.setAdapter(leftAdapter);
}
Log.e("tag","view leftOnSuccess = " + result);
}
@Override
public void leftOnFilure(String msg) {
}
@Override
public void rightOnSuccess(String result) {
RightBean rightBean = new Gson().fromJson(result,RightBean.class);
if (rightBean != null){
rightAdapter = new RightAdapter(this);
rightAdapter.getRightList(rightBean.result);
rv2.setAdapter(rightAdapter);
}
Log.e("tag","view leftOnSuccess = " + result);
}
@Override
public void rightOnFilure(String msg) {
}
private void getLeft(String cid){
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("keyword",cid);
goodsPresenter.rightPresenter(hashMap);
}
@Override
public void onClick(String cid) {
getLeft(cid);
}
}
依赖
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:logging-interceptor:3.7.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.github.jwkj:LibZXing:v1.0.4'
布局
<?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=".MainActivity"
android:orientation="horizontal">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv1"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="3"
android:background="#0f0"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv2"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="7"
android:background="#f00"/>
</LinearLayout>