添加依赖
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp:3.7.0'
implementation 'com.squareup.okio:okio:1.12.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.github.bumptech.glide:glide:4.8.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
implementation 'com.github.jwkj:LibZXing:v1.0.4'
implementation 'com.github.xiaohaibin:XBanner:1.6.1'
allprojects {
repositories {
google()
jcenter()
maven {url 'https://jitpack.io'}
}
}
添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
API
public static final String lefturl="http://172.17.8.100/small/commodity/v1/findFirstCategory";
public static final String Xbanner="http://172.17.8.100/small/commodity/v1/bannerShow";
public static final String Righturl="http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?page=1&count=10&keyword=鞋";
定义接口
interface ShowModel{
void modelLeftData(String url,NetCallBack netCallBack);
void modelRightData(String url,NetCallBack netCallBack);
void getbanner(String url,NetCallBack netCallBack);
}
interface ShowPresenter{
void presenterLeftData();
void presenterRightData(int id);
void getbanner();
}
interface ShowView{
void viewLeftData(Object o);
void viewRightData(Object o);
void getbanner(Object object);
}
interface NetCallBack{
void onResccuss(Object o);
void onFail(Exception e);
}
OKGttp
//单利静态
private static OkHttp instance;
private OkHttpClient client;
private Handler handler=new Handler(Looper.getMainLooper());
//单利模式
public static synchronized OkHttp getInstance(){
if(instance==null){
instance=new OkHttp();
}
return instance;
}
public OkHttp(){
//创建拦截器
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//使用构造者模式
client = new OkHttpClient.Builder()
.connectTimeout(20,TimeUnit.SECONDS)
.addNetworkInterceptor(interceptor)
.readTimeout(20,TimeUnit.SECONDS)
.writeTimeout(20,TimeUnit.SECONDS)
.build();
}
//网络请求
public void doGet(String url, final ICallback iCallback, final Class clazz){
//创建请求
Request request = new Request.Builder()
.get()
.url(url)
.build();
Call call = client.newCall(request);
//开启异步线程
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
iCallback.faild(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String s = response.body().string();
Gson gson = new Gson();
final Object o = gson.fromJson(s, clazz);
handler.post(new Runnable() {
@Override
public void run() {
iCallback.success(o);
}
});
}
});
}
public interface ICallback{
void success(Object object);
void faild(IOException s);
}
自定控件
public class CricleView extends LinearLayout {
public CricleView(Context context) {
super(context);
}
public CricleView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
View view=LayoutInflater.from(context).inflate(R.layout.title,this);
}
public CricleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
在activity中展示数据
left=findViewById(R.id.leftRecyclerView);
right=findViewById(R.id.rightRecyclerView);
xBanner=findViewById(R.id.xbanner);
showPresenter=new Presenter(this);
showPresenter.getbanner();
showPresenter=new Presenter(this);
showPresenter.presenterLeftData();
showPresenter=new Presenter(this);
showPresenter.presenterRightData(1);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
left.setLayoutManager(linearLayoutManager);
GridLayoutManager gridLayoutManager=new GridLayoutManager(MainActivity.this,3);
right.setLayoutManager(gridLayoutManager);
scan=findViewById(R.id.scan);
scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
QRCodeManager.getInstance()
.with(MainActivity.this)
.setReqeustType(1)
.scanningQRCode(new OnQRCodeScanCallback() {
@Override
public void onCompleted(String s) {
Toast.makeText(MainActivity.this,"成功"+ s,Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable throwable) {
Toast.makeText(MainActivity.this,"扫描取消了"+ throwable,Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(MainActivity.this,"扫描取消了",Toast.LENGTH_SHORT).show();
}
});
}
});
}
@Override
public void viewLeftData(Object o) {
LeftBean leftBean = (LeftBean) o;
LeftAdapter leftAdapter=new LeftAdapter(MainActivity.this, leftBean);
leftAdapter.SetOnItemClick(new LeftAdapter.SetOnItemClick() {
@Override
public void onOnItemClick(int position, List<LeftBean.ResultBean> list) {
showPresenter.presenterRightData(Integer.parseInt(list.get(position).getId()));
}
});
left.setAdapter(leftAdapter);
}
@Override
public void viewRightData(Object o) {
RightBean rightBean = (RightBean) o;
RightAdapter rightAdapter=new RightAdapter(MainActivity.this,rightBean);
right.setAdapter(rightAdapter);
}
@Override
public void getbanner(Object object) {
XbannerBean xbannerBean = (XbannerBean) object;
final List<XbannerBean.ResultBean> list=xbannerBean.getResult();
this.runOnUiThread(new Runnable() {
@Override
public void run() {
xBanner.setData(list, null);
xBanner.loadImage(new XBanner.XBannerAdapter() {
@Override
public void loadBanner(XBanner banner, Object model, View view, int position) {
Glide.with(MainActivity.this)
.load(list.get(position).getImageUrl())
.into((ImageView) view);
banner.setPageChangeDuration(2000);
}
});
//点击跳转传至
xBanner.setOnItemClickListener(new XBanner.OnItemClickListener() {
@Override
public void onItemClick(XBanner banner, Object model, View view, int position) {
Intent intent=new Intent(MainActivity.this,WebActivity.class);
intent.putExtra("url", list.get(position).getJumpUrl());
startActivity(intent);
}
});
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
QRCodeManager.getInstance().with(MainActivity.this).onActivityResult(requestCode,resultCode,data);
}