MVP登陆

//布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
    
    <EditText
        android:id="@+id/etAccount"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入账号" />

    <EditText
        android:id="@+id/etPwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:layout_below="@+id/etAccount"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="35dp" />

    <Button
        android:id="@+id/btLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="登陆"
        android:layout_marginLeft="38dp"
        android:layout_marginStart="38dp"
        android:layout_marginTop="48dp"
        android:layout_below="@+id/etPwd"/>

    <Button
        android:id="@+id/btExit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="退出登陆"
        android:layout_alignBaseline="@+id/btLogin"
        android:layout_alignBottom="@+id/btLogin"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="32dp"
        android:layout_marginEnd="32dp" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/btExit"
        android:layout_marginLeft="10dp"
        android:layout_marginStart="10dp"
        android:textColor="#FFFF333D"
        android:textSize="15dp"
        android:layout_marginTop="50dp"/>
</RelativeLayout>


//API
public interface Api {
    public static final boolean isOnline = false;
    public static final String devIp = "http://192.168.43.5";
    public static final String wrokIp = "http://172.17.27.34";
    public static final String HOST = isOnline ? wrokIp : devIp;


    public static final String LOGIN = HOST + "/mobile/index.php?act=login";
}
//BaseNetListener
public class BaseNetListener implements OnNetListener {
    @Override
    public void onSuccess(BaseBean baseBean) throws IOException {

    }

    @Override
    public void onError(IOException e) {

    }
}
//HttpUtil
package com.bwei.net;

import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;

import com.bwei.bean.BaseBean;
import com.bwei.utils.NetWorkUtil;
import com.google.gson.Gson;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * Created by peng on 2017/9/27.
 */

public class HttpUtil {
    private static volatile HttpUtil httpUtil;
    private final OkHttpClient client;
    private Context context;
    private Handler handler = new Handler(Looper.getMainLooper());

    private HttpUtil(Context context) {
        //缓存目录
        File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
        int cacheSize = 10 * 1024 * 1024;
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        client = new OkHttpClient.Builder()
                .addInterceptor(logging)
//                .addNetworkInterceptor(new CacheInterceptor())
//                .writeTimeout(20, TimeUnit.SECONDS)
//                .readTimeout(20, TimeUnit.SECONDS)
//                .cache(new Cache(sdcache,cacheSize))
                .build();
        this.context = context;

    }

    public static HttpUtil getInstance(Context context) {
        if (httpUtil == null) {
            synchronized (HttpUtil.class) {
                if (httpUtil == null) {
                    httpUtil = new HttpUtil(context);
                }
            }
        }
        return httpUtil;
    }

    public void doPost(String url, Map<String, String> params, final Class clazz, final OnNetListener onNetListener) {
        //网络判断
        if (!NetWorkUtil.isNetworkAvailable(context)) {
            Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show();
            return;
        }
        if (params != null && params.size() > 0) {
            FormBody.Builder builder = new FormBody.Builder();
            params.put("client", "android");
            for (Map.Entry<String, String> entry : params.entrySet()) {
                builder.add(entry.getKey(), entry.getValue());
            }
            FormBody formBody = builder.build();

            Request request = new Request.Builder().url(url).post(formBody).build();
            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {

                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    final BaseBean baseBean = (BaseBean) new Gson().fromJson(response.body().string(), clazz);
                    int code = baseBean.getCode();
                    if (code == 200) {
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    onNetListener.onSuccess(baseBean);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        });

                    } else if (code == 400) {

                    } else if (code == 300) {

                    }
                }
            });
        }


    }

    public void download(String url, Callback callback) {
        Request request = new Request.Builder().url(url).build();
        client.newCall(request).enqueue(callback);

    }

    public void doGet(String url, final Class clazz, final OnNetListener onNetListener) {
        //网络判断
        if (!NetWorkUtil.isNetworkAvailable(context)) {
            Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show();
            return;
        }
        Request.Builder builder = new Request.Builder();
        builder.url(url);
        final Request request = builder.build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onError(e);
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                final BaseBean baseBean = (BaseBean) new Gson().fromJson(string, clazz);
                int code = baseBean.getCode();
                if (code == 200) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                onNetListener.onSuccess(baseBean);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    });

                } else if (code == 400) {

                } else if (code == 300) {

                }
            }
        });
    }

    /**
     * @param url
     * @param params
     * @param header
     * @param clazz
     * @param onNetListener
     */
    public void doGet(String url, HashMap<String, String> params, HashMap<String, String> header, final Class clazz, final OnNetListener onNetListener) {

        //网络判断
        if (!NetWorkUtil.isNetworkAvailable(context)) {
            Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show();
            return;
        }

        Request.Builder builder = new Request.Builder();
        if (params != null && params.size() > 0) {
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, String> entry : params.entrySet()) {
                sb.append(url);
                sb.append("?");
                sb.append(entry.getKey());
                sb.append("=");
                sb.append(entry.getValue());
            }
            url = sb.toString();
        }
        builder.url(url);
        //添加请求头
        if (params != null && header.size() > 0) {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                builder.addHeader(entry.getKey(), entry.getValue());
            }
        }
        final Request request = builder.build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onError(e);
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                final BaseBean baseBean = (BaseBean) new Gson().fromJson(string, clazz);
                int code = baseBean.getCode();
                if (code == 200) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                onNetListener.onSuccess(baseBean);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    });

                } else if (code == 400) {

                } else if (code == 300) {

                }
            }
        });
    }

    /**
     * 上传
     *
     * @param url
     * @param fileName
     */
    public void uploadFile(String url, String fileName) {
        String file = Environment.getExternalStorageState() + "/" + fileName;
        RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
        //创建RequestBody 设置类型等
        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("file", fileName, fileBody).build();
        Request request = new Request.Builder().url(url).post(requestBody).build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });
    }

    /**
     * 下载
     *
     * @param url
     */
    public void download(String url) {
        Request request = new Request.Builder().url(url).build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });

    }
}
//OkHttpUtils

package com.bwei.net;

import android.os.Environment;
import android.os.Handler;
import android.os.Looper;

import java.io.IOException;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * Created by peng on 2017/10/11.
 * 使用懒汉式创建该对象,并保证线程安全
 */

public class OkHttpUtils {
    private static OkHttpUtils okHttpUtils;
    private final OkHttpClient httpClient;
    private final Handler handler;

    //构造方法私有化
    private OkHttpUtils() {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
        httpClient = new OkHttpClient.Builder()
                .addInterceptor(logging)
                .build();
        handler = new Handler(Looper.getMainLooper());
    }

    public static OkHttpUtils getInstance() {
        if (okHttpUtils == null) {
            synchronized (OkHttpUtils.class) {
                if (okHttpUtils == null) {
                    okHttpUtils = new OkHttpUtils();
                }
            }
        }
        return okHttpUtils;
    }


    /**
     * post请求
     *
     * @param url
     * @param params
     * @param clazz
     * @param onNetListener
     */
    public void doPost(String url, Map<String, String> params, Class clazz, OnNetListener onNetListener) {

        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            builder.add(entry.getKey(), entry.getValue());
        }
        FormBody formBody = builder.build();
        Request request = new Request.Builder().url(url).post(formBody).build();

        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });

    }

    public void doGet(String url, Class clazz, OnNetListener onNetListener) {
        Request request = new Request.Builder()
                .url(url)
                .build();

        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
//                        onNetListener.onSuccess();
                    }
                });
            }
        });
    }


    public void uploadFile(String url, String fileName) {
        String file = Environment.getExternalStorageState() + "/" + fileName;
        RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
        //创建RequestBody 设置类型等
        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("file", fileName, fileBody).build();
        Request request = new Request.Builder().url(url).post(requestBody).build();

        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });
    }

    public void download(String url) {
        Request request = new Request.Builder().url(url).build();
        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });

    }


}

//OnNetListener

public interface OnNetListener {
    public void onSuccess(BaseBean baseBean) throws IOException;

    public void onError(IOException e);
}

//MainPresenter

package com.bwei.presenter;

import android.content.Context;

import com.bwei.bean.LoginBean;
import com.bwei.model.LoginListener;
import com.bwei.model.LoginModel;
import com.bwei.mvplogin.IMainListener;

import java.io.IOException;

/**
 * Created by peng on 2017/10/24.
 */

public class MainPresenter {
    private IMainListener iMainListener;
    private Context context;
    private final LoginModel loginModel;

    public MainPresenter(IMainListener iMainListener) {
        this.context = (Context) iMainListener;
        this.iMainListener = iMainListener;
        loginModel = new LoginModel(context);
    }

    /**
     * 登陆,根据接口观察,需要用户名和密码
     */
    public void login() {
        //获取用户名
        String account = iMainListener.getAccount();
        //获取密码
        String pwd = iMainListener.getPwd();
        loginModel.login(account, pwd, new LoginListener() {
            @Override
            public void onSuccess(LoginBean loginBean) {
                //登陆成功
                StringBuilder sb = new StringBuilder();
                sb.append(loginBean.getDatas().getUsername());
                sb.append(" " + loginBean.getDatas().getUserid());
                sb.append(" " + loginBean.getDatas().getKey());
                iMainListener.setResult(sb.toString());
            }

            @Override
            public void onError(IOException e) {
                //登陆失败
            }
        });
    }


}
//NetWorkUtil

package com.bwei.utils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * Created by peng on 2017/9/27.
 */

public class NetWorkUtil {
    // check all network connect, WIFI or mobile
    public static boolean isNetworkAvailable(final Context context) {
        boolean hasWifoCon = false;
        boolean hasMobileCon = false;

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfos = cm.getAllNetworkInfo();
        for (NetworkInfo net : netInfos) {

            String type = net.getTypeName();
            if (type.equalsIgnoreCase("WIFI")) {
                if (net.isConnected()) {
                    hasWifoCon = true;
                }
            }

            if (type.equalsIgnoreCase("MOBILE")) {
                if (net.isConnected()) {
                    hasMobileCon = true;
                }
            }
        }
        return hasWifoCon || hasMobileCon;

    }
}

//IMainListener
public interface IMainListener {
    public String getAccount();

    public String getPwd();

    public void setResult(String str);
}

//LoginListener
public interface LoginListener {
    public void onSuccess(LoginBean loginBean);

    public void onError(IOException e);
}
//LoginModel
public class LoginModel {
    private Context context;

    public LoginModel(Context context) {
        this.context = context;
    }

    public void login(String account, String pwd, final LoginListener loginListener) {
        //在model层里,做真正的登陆请求
        Map<String, String> params = new HashMap<>();
        params.put("username", account);
        params.put("password", pwd);
        params.put("client", "android");
        HttpUtil.getInstance(context).doPost(Api.LOGIN, params,LoginBean.class, new OnNetListener() {
            @Override
            public void onSuccess(BaseBean baseBean) throws IOException {
                LoginBean loginBean = (LoginBean) baseBean;
                loginListener.onSuccess(loginBean);
            }

            @Override
            public void onError(IOException e) {
                loginListener.onError(e);
            }
        });
    }
}

//BaseBean
public class BaseBean {
    public int code;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}
//LoginBean
package com.bwei.bean;

/**
 * Created by peng on 2017/10/10.
 */

public class LoginBean extends BaseBean {

    /**
     * datas : {"username":"andro","userid":"8","key":"c0e92b92c2e782221a78b8f457389440"}
     */

    private DatasBean datas;

    public DatasBean getDatas() {
        return datas;
    }

    public void setDatas(DatasBean datas) {
        this.datas = datas;
    }

    public static class DatasBean {
        /**
         * username : andro
         * userid : 8
         * key : c0e92b92c2e782221a78b8f457389440
         */

        private String username;
        private String userid;
        private String key;

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getUserid() {
            return userid;
        }

        public void setUserid(String userid) {
            this.userid = userid;
        }

        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }
    }
}

//mainactivity

package com.bwei.mvplogin;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.bwei.presenter.MainPresenter;


public class MainActivity extends AppCompatActivity implements View.OnClickListener, IMainListener {

    /**
     * 请输入账号
     */
    private EditText mEtAccount;
    /**
     * 请输入密码
     */
    private EditText mEtPwd;
    /**
     * 登陆
     */
    private Button mBtLogin;
    private MainPresenter mainPresenter;
    private TextView mTv;
    /**
     * 退出登陆
     */
    private Button mBtExit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mainPresenter = new MainPresenter(this);
        initView();
    }

    private void initView() {
        mEtAccount = (EditText) findViewById(R.id.etAccount);
        mEtPwd = (EditText) findViewById(R.id.etPwd);
        mBtLogin = (Button) findViewById(R.id.btLogin);
        mBtLogin.setOnClickListener(this);
        mTv = (TextView) findViewById(R.id.tv);
        mBtExit = (Button) findViewById(R.id.btExit);
        mBtExit.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btLogin:
                //登陆
                mainPresenter.login();
                break;
            case R.id.btExit:
                break;
        }
    }


    @Override
    public String getAccount() {
        return mEtAccount.getText().toString().trim();
    }

    @Override
    public String getPwd() {
        return mEtPwd.getText().toString().trim();
    }

    @Override
    public void setResult(String str) {
        mTv.setText(str);
    }
}

//build.gradle
 compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'

//权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值