这是一个RecyclerView的案例,用到了OKhttp和MVP,下面先看一下MainActivity
public class MainActivity extends AppCompatActivity implements Iview {
MyPresenter presenter;
private RecyclerView mRcv;
PhoneBean pbean1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
presenter = new MyPresenter(this, this);
presenter.Loading();
// LinearLayoutManager manager=new LinearLayoutManager(this);
// mRcv.setLayoutManager(manager);
// GridLayoutManager manager=new GridLayoutManager(this,2);
// mRcv.setLayoutManager(manager);
StaggeredGridLayoutManager manager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
mRcv.setLayoutManager(manager);
}
private void initView() {
mRcv = (RecyclerView) findViewById(R.id.rcv);
}
@Override
public void showData(PhoneBean pbean) {
pbean1=pbean;
MyRecyAdapter myRecyAdapter=new MyRecyAdapter();
mRcv.setAdapter(myRecyAdapter);
}
class MyRecyAdapter extends RecyclerView.Adapter<MyRecyAdapter.ViewHolder>{
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View vi=View.inflate(MainActivity.this,R.layout.item_layout,null);
return new ViewHolder(vi);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.tv.setText(pbean1.getData().get(position).getTitle());
Glide.with(MainActivity.this)
.load(pbean1.getData().get(position).getImages())
.into(holder.imv);
}
@Override
public int getItemCount() {
return pbean1.getData()==null?0:pbean1.getData().size();
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv;
ImageView imv;
public ViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
imv = (ImageView) itemView.findViewById(R.id.imv);
}
}
}
}
//这是model包里的两个类Imodel和MyModel,MyModel实现了Imodel接口
public interface Imodel {
public void initData(Callback callback);
}
******************************************************************************************************
public class MyModel implements Imodel {
@Override
public void initData(Callback callback) {
OkHttpUtils.getInstance().doGet("http://120.27.23.105/product/getProducts?pscid=39&page=1",callback);
}
}
//这是View包里的Iview类
public interface Iview {
public void showData(PhoneBean pbean);
}
//这是Presenter包里的MyPresenter类public class MyPresenter {
Context context;
Iview view;
MyModel model;
public MyPresenter(Context context,Iview view){
this.context=context;
this.view=view;
model=new MyModel();
}
public void Loading(){
model.initData(new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) {
Gson gson=new Gson();
PhoneBean pbean=gson.fromJson(result,PhoneBean.class);
view.showData(pbean);
}
});
}
}
//这是OKhttp的封装类
public class OkHttp3Utils {
private static OkHttpClient okHttpClient = null;
public OkHttp3Utils() {
}
private static OkHttpClient getOkHttpClient() {
synchronized (OkHttp3Utils.class) {
if (okHttpClient == null) {
okHttpClient = new OkHttpClient();
}
}
return okHttpClient;
}
//上传文件
public static void loadFile(String url, File file,String fileName){
OkHttpClient okHttpClient = getOkHttpClient();
//设置文件类型
RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"),file);
//设置请求体
RequestBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("image",fileName,requestBody)
.build();
//请求方式
Request request = new Request.Builder().url(url).post(body).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i("成功","成功");
}
});
}
/**
* 1.接口地址
* 2.接口回调
*/
public static void doGet(String url,Callback callback){
OkHttpClient okHttpClient = getOkHttpClient();
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(callback);
}
/**
* 1.地址
* 2.接口回调
* 3.请求体
*/
public static void doPost(String url, Map<String,String> map,Callback callback){
OkHttpClient okHttpClient = getOkHttpClient();
FormBody.Builder builder = new FormBody.Builder();
//遍历map集合 设置请求体
for (String mapKey : map.keySet()){
builder.add(mapKey,map.get(mapKey));
}
//设置请求方式
Request request = new Request.Builder().url(url).post(builder.build()).build();
//执行请求方式 接口回调
okHttpClient.newCall(request).enqueue(callback);
}
/**
*1.下载地址
*/
public static void doDown(String url,Callback callback){
OkHttpClient okHttpClient = getOkHttpClient();
Request build = new Request.Builder().url(url).build();
okHttpClient.newCall(build).enqueue(callback);
}
}
***************************************************************************************************************
public class OkHttpUtils {
private Handler handler=new Handler();
public Handler getHandler(){
return handler;
}
//单例
private static OkHttpUtils okHttpUtils=new OkHttpUtils();
private OkHttpUtils(){};
public static OkHttpUtils getInstance(){
return okHttpUtils;
}
private OkHttpClient client;
private void initOkHttpClient(){
if (client==null){
client=new OkHttpClient.Builder().build();
}
}
//公用的get请求方法 完成的功能不确定
public void doGet(String url, Callback callback){
initOkHttpClient();
Request request=new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
}
*******************************************************************************************************
public abstract class OnUiCallback implements Callback {
private Handler handler=OkHttpUtils.getInstance().getHandler();
public abstract void onFailed(Call call,IOException e);
public abstract void onSuccess(String result);
@Override
public void onFailure(final Call call, final IOException e) {
//该方法就是把 线程post到handler所在的线程
handler.post(new Runnable() {
@Override
public void run() {
// e.getMessage()
onFailed(call,e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String result=response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
onSuccess(result);
}
});
}
}