網路請求工具類和mvp的封裝
阿新 • • 發佈:2019-01-02
1.okhttp工具
public class OkHttpUtil { private static final String METHOD_GET = "GET"; private static OkHttpClient client; private static RequestBody body; public OkHttpUtil() { } public static void init(){ client = new OkHttpClient.Builder() .writeTimeout(3000,TimeUnit.MILLISECONDS) .readTimeout(3000,TimeUnit.MILLISECONDS) .build(); } public static Request createRequest(String url,String method){ Request request=new Request.Builder().url(url).build(); switch (method){ case METHOD_GET: body = request.body(); break; } return request; } public static void get(String url, Callback callback){ Request request = createRequest(url, METHOD_GET); Call call = client.newCall(request); call.enqueue(callback); } }
2.view層
public interface View {
void onSuccess(String result);
void onFail(String msg);
}
3.model層
public class Model { Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; public void model(String url, final HttpData data){ OkHttpUtil.get(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { final String s = response.body().string(); handler.post(new Runnable() { @Override public void run() { data.Jk(s); } }); } }); } //建立介面 public interface HttpData{ void Jk(String xn); } }
4.persenter層
public class Persenter { private Model model; private View view; public Persenter( View view) { model=new Model(); this.view = view; } public void pers(String url){ model.model(url, new Model.HttpData() { @Override public void Jk(String xn) { if(xn!=null){ view.onSuccess(xn); }else{ view.onFail("資料失敗"); } } }); } }
4.主頁面
public class FristFragment extends Fragment implements com.umeng.soexmple.yuekaocheng.view.View,TwoView {
private RecyclerView recyclerView;
private List<Htt.DataBean> list=new ArrayList<>();
private String path="http://www.xieast.com/api/news/news.php?page=1";
private String twopath="http://www.wanandroid.com/tools/mockapi/6523/restaurants_offset_0_limit_4";
private List<TwoUser.DataBean> list2=new ArrayList<>();
private RecyclerView twore;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_frist, container, false);
recyclerView = view.findViewById(R.id.recycler);
twore = view.findViewById(R.id.recyclertwo);
Persenter persenter=new Persenter(this);
persenter.pers(path);
TwoPersenter persenter1=new TwoPersenter(this);
persenter1.twomodel(path);
return view;
}
@Override
public void onSuccess(String result) {
Gson gson=new Gson();
Htt htt = gson.fromJson(result, Htt.class);
List<Htt.DataBean> data = htt.getData();
list.addAll(data);
GridLayoutManager gridLayoutManager=new GridLayoutManager(getContext(),4);
recyclerView.setLayoutManager(gridLayoutManager);
MyAdapter adapter=new MyAdapter(list,getContext());
recyclerView.setAdapter(adapter);
}
@Override
public void onFail(String msg) {
}
@Override
public void onDataSuccess(String cheng) {
Gson gson=new Gson();
TwoUser twoUser = gson.fromJson(cheng, TwoUser.class);
List<TwoUser.DataBean> data = twoUser.getData();
LinearLayoutManager manager=new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
twore.setLayoutManager(manager);
list2.addAll(data);
TwoAdapter adapter=new TwoAdapter(list,getContext());
twore.setAdapter(adapter);
}
@Override
public void onDataFail(String shi) {
}
}
5.初始化網路請求
6.設定網路許可權