1:
public interface IDelegate { //初始化(联网操作,数据操作等) void initData(); //创建布局 void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle); View getRootView(); //获取上下文 void getContext(Context context); } 2:
public abstract class AppDelegate implements Delegate{ private View rootView; @Override public void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) { rootView=inflater.inflate(getLayoutId(),viewGroup,false); } @Override public View getRootView() { return rootView; } //子类给咱们传递的layout public abstract int getLayoutId(); private SparseArray<View> views=new SparseArray<>(); //获取控件id public <T extends View> T get(int id){ T view= (T) views.get(id); if(view==null){ view=rootView.findViewById(id); views.put(id,view); } return view; } //多个控件注册点击的监听 public void setOnClick(View.OnClickListener listener,int... ids){ if(ids==null){ return; } for (int id:ids){ get(id).setOnClickListener(listener); } } //销毁View视图 public void destory(){ rootView=null; } }
3: public abstract class BaseActivityPresenter<T extends AppDelegate> extends AppCompatActivity{ private T delegate; public abstract Class<T> getClassDelegate(); public BaseActivityPresenter(){ try { delegate= getClassDelegate().newInstance(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); delegate.create(getLayoutInflater(),null,savedInstanceState); setContentView(delegate.getRootView()); delegate.getContext(this); delegate.initData(); }
@Override
protected void onDestroy() {
super.onDestroy();
delegata.destory();
delegata=null;
}
}
4:
public abstract class BaseFragmentPresenter<T extends AppDelegate> extends Fragment{
private T delegate;
public abstract Class<T> getClassDelegate();
public BaseFragmentPresenter(){
try {
delegate= getClassDelegate().newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (java.lang.InstantiationException e) {
e.printStackTrace();
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
delegate.create(inflater,container,savedInstanceState);
return delegate.getRootView();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
delegate.getContext(getActivity());
delegate.initData();
}
@Override
public void onDestroy() {
super.onDestroy();
delegate.destory();
delegate=null;
}
}
5:
写个 Httplister
public interface HttpListenter {
void success(String data);
void fail(String error);
}
6: 开始OkHttpUtil 页面
public class OkHttpUtil {
private final int FAI_CHENGGONG =1000 ;
private final int FAI_CODE = 1001 ;
private HttpListenter listenter;
public OkHttpUtil get(String url){
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder()
.url(url)
.build();
try {
doHttp(okHttpClient,request);
} catch (IOException e) {
e.printStackTrace();
}
return this;
}
private void doHttp(OkHttpClient okHttpClient, Request request) throws IOException {
final Message message = Message.obtain();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
message.what=FAI_CODE;
message.obj= e.getMessage();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String data = response.body().string();
message.what=FAI_CHENGGONG;
message.obj=data;
handler.sendMessage(message);
}
});
}
/子线程发送
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case FAI_CHENGGONG:
String data= (String) msg.obj;
listenter.success(data);
break;
case FAI_CODE:
String erro= (String) msg.obj;
listenter.fail(erro);
break;
}
}
};
/自定义
public void result(HttpListenter listenter){
this.listenter=listenter;
}
///post请求
public OkHttpUtil post(String url , RequestBody body){
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder()
.url(url)
.post(body)
.build();
return this;
}
}
依赖包::implementation 'com.squareup.okhttp:okhttp:2.0.0'