HttpUtilsCallback:
public interface HttpUtilsCallback {
void onSuccess(String success);
void onFail(int errCode, String errMsg);
}
NetUtil:
public class NetUtil implements Callback {
private final OkHttpClient okHttpClient;
private HttpUtilsCallback httpUtilsCallback;
private NetUtil() {
okHttpClient = new OkHttpClient.Builder().build();
}
private static class staticClassLazy{
private static NetUtil netUtil=new NetUtil();
}
public static NetUtil getInstance(){
return staticClassLazy.netUtil;
}
public void doGet(String path,HttpUtilsCallback httpUtilsCallback){
this.httpUtilsCallback = httpUtilsCallback;
Request request = new Request.Builder()
.url(path)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(this);
}
public void doPost(String path, HashMap<String,String> map,HttpUtilsCallback httpUtilsCallback){
this.httpUtilsCallback = httpUtilsCallback;
FormBody.Builder builder = new FormBody.Builder();
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()){
String key = iterator.next();
String value = map.get(key);
builder.add(key,value);
}
FormBody body = builder.build();
Request request = new Request.Builder()
.url(path)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(this);
}
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
httpUtilsCallback.onSuccess(string);
}
}
BasePresenter:
public class BasePresenter<T extends IBaseView> {
private T t;
public void attachView(T t){
this.t=t;
}
public T getView(){
return t;
}
public void detachView(){
t=null;
}
}
MainPresenter:
public class MainPresenter extends BasePresenter<IMainView>{
private NetUtil netUtil;
public MainPresenter() {
netUtil = NetUtil.getInstance();
}
public void getDataFromServer(String path,HashMap<String, String> map) {
netUtil.doPost(path, map, new HttpUtilsCallback() {
@Override
public void onSuccess(String success) {
getView().onSuccess(success);
}
@Override
public void onFail(int errCode, String errMsg) {
}
});
}
}
BaseActivity:
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView {
private MyTitleView parent_title;
private FrameLayout child_view;
private P p;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
initParentView();
View view = View.inflate(this, setChildContentView(), null);
child_view.addView(view);
initView();
p=initPresenter();
if (p != null) {
p.attachView(this);
}else {
try {
throw new Exception("少年 prenter 没有设置 请在您的Activity 创建 presenter");
} catch (Exception e) {
e.printStackTrace();
}
}
initData();
}
public MyTitleView getParent_title(){
return parent_title;
}
private void initParentView() {
parent_title = findViewById(R.id.parent_title);
child_view = findViewById(R.id.child_view);
parent_title.getBack().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
public P getPresenter() {
return p;
}
abstract void initView();
abstract void initData();
abstract P initPresenter();
abstract int setChildContentView();
}
MainActivity:
public class MainActivity extends BaseActivity<MainPresenter> implements IMainView{
@Override
void initView() {
}
@Override
void initData() {
}
@Override
MainPresenter initPresenter() {
return new MainPresenter();
}
@Override
int setChildContentView() {
return R.layout.activity_main;
}
@Override
public void onSuccess(String success) {
}
@Override
public void onError(String error) {
}
@Override
protected void onDestroy() {
super.onDestroy();
getPresenter().detachView();
}
}
MyTitleView:
public class MyTitleView extends RelativeLayout implements View.OnClickListener {
private Context context;
private TextView textView;
private ImageView imageView;
public MyTitleView(Context context) {
this(context,null);
}
public MyTitleView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MyTitleView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context=context;
initView(context);
}
private void initView(final Context context) {
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
textView = new TextView(context);
textView.setId(R.id.tv);
textView.setText("标题");
textView.setTextSize(20);
textView.setTextColor(Color.WHITE);
addView(textView,params);
textView.setOnClickListener(this);
LayoutParams params1 = new LayoutParams(100, 100);
params1.addRule(RelativeLayout.ALIGN_LEFT);
params1.addRule(RelativeLayout.CENTER_VERTICAL);
params1.leftMargin=20;
imageView = new ImageView(context);
imageView.setId(R.id.img);
imageView.setImageResource(R.drawable.icon_back);
addView(imageView,params1);
}
public TextView getTitle(){
return textView;
}
public ImageView getBack(){
return imageView;
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.tv:
Toast.makeText(context, ""+textView.getText().toString(), Toast.LENGTH_SHORT).show();
break;
}
}
}
IBaseView:
public interface IBaseView { }
IMainView:
public interface IMainView extends IBaseView {
void onSuccess(String success);
void onError(String error);
}
activity_base.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.activity.BaseActivity">
<com.example.test_mvp.view.customview.MyTitleView
android:id="@+id/parent_title"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/colorAccent"/>
<FrameLayout
android:id="@+id/child_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.constraint.ConstraintLayout>
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.activity.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>