首先导入包
//okhttp
implementation 'com.survivingwithandroid:weatherlib_okhttpclient:1.6.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
//黄油刀
implementation 'com.jakewharton:butterknife:8.7.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
//图片加载框架,glide
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.google.code.gson:gson:2.8.5'
清单文件
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
布局1
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edit_qiery"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:onClick="dainjia"
android:text="搜索" />
</LinearLayout>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
listview布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageView
android:id="@+id/img"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="center"
/>
<TextView
android:id="@+id/title"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
API
package com.example.dell.san.api;
public class Api {
public static final String BASE_URL="http://www.zhaoapi.cn/";
}
ProductApi
package com.example.dell.san.api;
import static com.example.dell.san.api.Api.BASE_URL;
public class Product_api {
public final static String PRODUCT_URL=BASE_URL+"product/searchProducts";
}
接口回调
package com.example.dell.san.callback;
import com.example.dell.san.bean.Bean;
public interface ProductCallBack {
void failure(String s);
void success(Bean s);
}
锲约类
package com.example.dell.san.contract;
import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;
import java.util.HashMap;
public interface PoductContract {
//m
public interface InDataModle{
void getDataModle(HashMap<String,String> hashMap, ProductCallBack callBack);
}
//view层
public interface InDataView{
void ViewFilure(String s);
void ViewSuccess(Bean s);
}
//presenter层
public abstract class DataPresenter{
public abstract void getData(HashMap<String,String> hashMap);
}
}
modle层
package com.example.dell.san.modle;
import android.os.Handler;
import com.example.dell.san.api.Product_api;
import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;
import com.example.dell.san.contract.PoductContract;
import com.example.dell.san.utils.OkhttpUtils;
import java.util.HashMap;
public class DataModle implements PoductContract.InDataModle{
private Handler handler=new Handler();
@Override
public void getDataModle(final HashMap<String, String> hashMap, final ProductCallBack callBack) {
OkhttpUtils.getInstance().dopost(Product_api.PRODUCT_URL, hashMap, new ProductCallBack() {
@Override
public void failure(final String s) {
handler.post(new Runnable() {
@Override
public void run() {
callBack.failure(s);
}
});
}
@Override
public void success(final Bean s) {
handler.post(new Runnable() {
@Override
public void run() {
callBack.success(s);
}
});
}
});
}
}
okHttputils
package com.example.dell.san.utils;
import android.os.Handler;
import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;
import com.google.gson.Gson;
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;
public class OkhttpUtils {
private static OkhttpUtils okhttputils;
private OkHttpClient okHttpClient;
private Handler handler=new Handler();
//私有构造方法
private OkhttpUtils(){
okHttpClient=new OkHttpClient.Builder()
.connectTimeout(5,TimeUnit.SECONDS)
.writeTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.build();
}
//双重检验锁 创建实列 单列模式
public static OkhttpUtils getInstance(){
if (okhttputils==null){
synchronized (OkhttpUtils.class){
if (okhttputils==null){
okhttputils=new OkhttpUtils();
}
}
}
return okhttputils;
}
//用dopost方法
public void dopost(String url,HashMap<String,String> parmes,final ProductCallBack callBack){
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String,String> map:parmes.entrySet()){
builder.add(map.getKey(),map.getValue());
}
RequestBody requestBody = builder.build();
final 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.failure("网络请求失败");
}
});
}
}
@Override
public void onResponse(final Call call, Response response) throws IOException {
if (response.code()==200){
String result=response.body().string();
final Bean bean=new Gson().fromJson(result,Bean.class);
handler.post(new Runnable() {
@Override
public void run() {
callBack.success(bean);
}
});
}
}
});
}
}
bean类
package com.example.dell.san.bean;
import java.util.List;
public class Bean {
public String msg;
public String code;
public List<Product> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<Product> getData() {
return data;
}
public void setData(List<Product> data) {
this.data = data;
}
public class Product{
public String images;
public String title;
public String getImages() {
return images;
}
public void setImages(String images) {
this.images = images;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
p层
package com.example.dell.san.presenter;
import com.example.dell.san.bean.Bean;
import com.example.dell.san.callback.ProductCallBack;
import com.example.dell.san.contract.PoductContract;
import com.example.dell.san.modle.DataModle;
import java.util.HashMap;
public class Product_Presenter extends PoductContract.DataPresenter{
private final DataModle dataModle;
private PoductContract.InDataView inDataView;
public Product_Presenter(PoductContract.InDataView inDataView){
dataModle = new DataModle();
this.inDataView=inDataView;
}
@Override
public void getData(HashMap<String, String> hashMap) {
String s=hashMap.get("keywords");
if (s!=null){
dataModle.getDataModle(hashMap, new ProductCallBack() {
@Override
public void failure(String s) {
inDataView.ViewFilure(s);
}
@Override
public void success(Bean s) {
inDataView.ViewSuccess(s);
}
});
}
}
}
mainactivity
package com.example.dell.san.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.dell.san.R;
import com.example.dell.san.adapter.MyBaseAdapter;
import com.example.dell.san.bean.Bean;
import com.example.dell.san.contract.PoductContract;
import com.example.dell.san.presenter.Product_Presenter;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements PoductContract.InDataView {
private EditText mQieryEdit;
private ListView mViewList;
private Product_Presenter product_presenter;
private MyBaseAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//点击事件
// 实现新的借还
initData();
//添加适配器
mViewList.setAdapter(adapter);
}
public void dainjia(View view) {
String s=mQieryEdit.getText().toString();
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("keywords",s);
product_presenter.getData(hashMap);
}
private void initData() {
product_presenter=new Product_Presenter(this);
adapter=new MyBaseAdapter(this);
}
private void initView() {
mQieryEdit = (EditText) findViewById(R.id.edit_qiery);
mViewList = (ListView) findViewById(R.id.list_view);
}
@Override
public void ViewFilure(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
}
@Override
public void ViewSuccess(Bean s) {
Toast.makeText(MainActivity.this,"成功",Toast.LENGTH_SHORT).show();
adapter.setList(s.data);
}
}
adapter
package com.example.dell.san.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.dell.san.R;
import com.example.dell.san.activity.MainActivity;
import com.example.dell.san.bean.Bean;
import java.util.ArrayList;
import java.util.List;
public class MyBaseAdapter extends BaseAdapter {
private Context context;
private List<Bean.Product> list;
public MyBaseAdapter(Context context) {
this.context = context;
list=new ArrayList<>();
}
public void setList(List<Bean.Product> list1) {
list.clear();
if (list1!=null){
list.addAll(list1);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView==null){
holder=new ViewHolder();
convertView=LayoutInflater.from(context).inflate(R.layout.activity_product,parent,false);
holder.img=convertView.findViewById(R.id.img);
holder.title=convertView.findViewById(R.id.title);
convertView.setTag(holder);
}else{
holder= (ViewHolder) convertView.getTag();
}
holder.title.setText(list.get(position).getTitle());
String imgs=list.get(position).getImages();
String[] split=imgs.split("\\|");
Glide.with(context).load(split[0]).into(holder.img);
return convertView;
}
class ViewHolder{
ImageView img;
TextView title;
}
}