接口
package com.example.dell.day1229.api;
public class Api {
public static final String BASE_URL = “http://www.zhaoapi.cn/”;
}
package com.example.dell.day1229.api;
import static com.example.dell.day1229.api.Api.BASE_URL;
public class ProductApi {
public static final String uri= BASE_URL+“product/searchProducts”;
}
主布局
package com.example.dell.day1229;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.dell.day1229.Bean.ProductBean;
import com.example.dell.day1229.adapter.RecyclerViewAdapter;
import com.example.dell.day1229.api.ProductApi;
import com.example.dell.day1229.callback.OkhttplCallback;
import com.example.dell.day1229.utils.OkhttpUtils;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.btn)
Button button;
@BindView(R.id.query)
EditText editText;
@BindView(R.id.rec_listview)
RecyclerView recyclerView;
private List<ProductBean.Product> list;
private RecyclerViewAdapter viewAdapter;
private ProductBean productBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//加载视图
initView();
//加载数据
initData();
}
private void initData() {
list = new ArrayList<>();
}
private void initView() {
ButterKnife.bind(this);
recyclerView.setLayoutManager(new LinearLayoutManager(this,1,false));
}
@OnClick(R.id.btn)
public void click(View view){
String s=editText.getText().toString();
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("keywords",s);
OkhttpUtils.getOkhttputils().doPost(ProductApi.uri,hashMap,new OkhttplCallback(){
@Override
public void failure(String s) {
Toast.makeText(MainActivity.this,"对不起错误",Toast.LENGTH_SHORT).show();
}
@Override
public void success(String s) {
Toast.makeText(MainActivity.this,"请求数据成功",Toast.LENGTH_SHORT).show();
jiexishuju(s);
}
});
}
private void jiexishuju(String s) {
productBean = new Gson().fromJson(s, ProductBean.class);
if (productBean !=null){
viewAdapter = new RecyclerViewAdapter(this,productBean.data);
recyclerView.setAdapter(viewAdapter);
}
}
}
utils
package com.example.dell.day1229.utils;
import android.os.Handler;
import com.example.dell.day1229.callback.OkhttplCallback;
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 OkHttpClient okHttpClient;
private static OkhttpUtils okhttpUtils;//私有属性
private Handler handler=new Handler();
//静态方法
private OkhttpUtils(){
okHttpClient=new OkHttpClient.Builder()
.readTimeout(5,TimeUnit.SECONDS)
.writeTimeout(5,TimeUnit.SECONDS)
.connectTimeout(5,TimeUnit.SECONDS)
.build();
}
//自动生成构造方法
public static OkhttpUtils getOkhttputils(){
if (okhttpUtils==null){
synchronized (OkhttpUtils.class){
if (okhttpUtils==null){
okhttpUtils = new OkhttpUtils();
}
}
}
return okhttpUtils;
}
public void doPost(String url, HashMap<String, String> hashMap, final OkhttplCallback callback){
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String,String> p: hashMap.entrySet()) {
builder.add(p.getKey(),p.getValue());
}
RequestBody build = builder.build();
Request builder2 = new Request.Builder()
.url(url)
.post(build)
.build();
okHttpClient.newCall(builder2).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
callback.failure("对不起错误!");
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string=response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
callback.success(string);
}
});
}
});
}
}
Bean类
package com.example.dell.day1229.Bean;
import java.util.List;
public class ProductBean {
public String msg;
public String code;
public List<Product> data;
public class Product {
public String images;
public String title;
}
}
接口回调
package com.example.dell.day1229.callback;
public interface OkhttplCallback {
void failure(String s);
void success(String s);
}
Adapter
package com.example.dell.day1229.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.bumptech.glide.Glide;
import com.example.dell.day1229.Bean.ProductBean;
import com.example.dell.day1229.R;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private Context context;
private List<ProductBean.Product> list;
public RecyclerViewAdapter(Context context, List<ProductBean.Product> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
/*加载子布局*/
View view=LayoutInflater.from(context).inflate(R.layout.activity_product,viewGroup,false);
//设置适配器
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder viewHolder, int i) {
ProductBean.Product product=list.get(i);
viewHolder.textView.setText(product.title);
String images = product.images;
String[] split = images.split("\\|");
if (split!=null && split.length>0){
Glide.with(context).load(split[0]).into(viewHolder.imageView);
}else{
viewHolder.imageView.setImageResource(R.mipmap.ic_launcher);
}
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
/**
* 寄存器
*/
class ViewHolder extends RecyclerView.ViewHolder{
private final ImageView imageView;
private final TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.img_view);
textView = itemView.findViewById(R.id.tv_title);
}
}
}