1.定义一个里面有两个方法的接口(NetDataCallbact);
public interface NetDataCallback {
void err(int code,String st);
void callback(String str);
}
2.OkHttp网络请求的工具类(HttpUtils):
public class HttpUtils {
private NetDataCallback netDataCallback;
public void getdata(String url, final NetDataCallback netDataCallback) {
//初始化一个 OkHttpClient 并且设置连接和读取超时时间
OkHttpClient okhttp = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
//构造一个Request对象
Request request = new Request.Builder().url(url).build();
//通过request的对象去构造得到一个Call对象
//Call call = okhttp.newCall(request);
Call call = okhttp.newCall(request);
//调用的是call.enqueue,将call加入调度队列,然后等待任务执行完成,我们在Callback中即可得到结果。
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
netDataCallback.err(500,e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
netDataCallback.callback(response.body().string());
}
});
}
}
3.V层定义的一个里面两个方法的接口(Fm2view):
public interface Fm2View {
void successfulCallback(String str);
void errCallback(int code,String msg);
}
4.P层presenter定义的一个类 Fm2Presenter:
public class Fm2Presenter {
private HttpUtils http;
private Fm2View fv;
public Fm2Presenter(Fm2View fv) {
this.fv = fv;
http=new HttpUtils();
}
public void loaddatafromserver(String str){
http.getdata(str, new NetDataCallback() {
@Override
public void callback(String str) {
fv.successfulCallback(str);
}
@Override
public void err(int errcode, String errMsg) {
fv.errCallback(errcode,errMsg);
}
});
}
}
5.RecyclerView适配器类(Newsadapter):
public class Newsadapter extends RecyclerView.Adapter {
private View view;
private Context mcontext;
private ArrayList<News.LayoutsBean> mlist=new ArrayList<>();
public Newsadapter(Context mcontext) {
this.mcontext = mcontext;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mcontext).inflate(R.layout.fragment2item, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder viewholder =(ViewHolder) holder;
viewholder.tv.setText(""+mlist.get(position).getName());
}
//手写的重置数据的方法
public void setdata(ArrayList<News.LayoutsBean> list){
if (list!=null&&list.size()>0){
mlist.addAll(list);
}
}
//手写的获得视图的方法
public News.LayoutsBean getItem(int position){
return mlist.get(position);
};
@Override
public int getItemCount() {
return mlist.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView tv;
public ViewHolder(View itemView) {
super(itemView);
tv=(TextView)itemView.findViewById(R.id.fm2text_view);
}
}
}
6.Fragment界面(Fragment2):
public class Fragment2 extends Fragment implements Fm2View{
private Fm2Presenter fp;
private RecyclerView recy;
private Newsadapter mnd;
private String url="http://h5test.newaircloud.com/api/getLayouts?sid=xkycs&cid=10024&date=";
private ArrayList<News.LayoutsBean> mlist=new ArrayList<>();
private Handler hand=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Gson gson=new Gson();
if (msg.what==1) {
News news = gson.fromJson(msg.obj.toString(), News.class);
mlist =(ArrayList<News.LayoutsBean>) news.getLayouts();
mnd.setdata((ArrayList<News.LayoutsBean>) mlist);
mnd.notifyDataSetChanged();
}
}
};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2, container, false);
recy=(RecyclerView)view.findViewById(R.id.rcv);
initdata();
//加载网络数据
fp.loaddatafromserver(url);
return view;
}
private void initdata() {
fp=new Fm2Presenter(this);
mnd=new Newsadapter(getActivity());
recy.setLayoutManager(new LinearLayoutManager(getActivity()));
recy.setAdapter(mnd);
}
//实现接口重写的两个方法
@Override
public void successfulCallback(String str) {
Message msg = Message.obtain();
msg.what=1;
msg.obj=str;
hand.sendMessage(msg);
}
@Override
public void errCallback(int code, String msg) {
}
}