MVP模式登录(OKHTTP请求数据)

来源:互联网 发布:java获取 d参数 编辑:程序博客网 时间:2024/04/27 16:56


一:使用前导入依赖

[java] view plain copy
  1. compile 'com.squareup.okhttp3:okhttp:3.9.0'  

二:需要的权限

[java] view plain copy
  1. <uses-permission android:name="android.permission.INTERNET"/>  
  2.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  3.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
  4.     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>  

三:View层

------------------MainActivity

package com.bwie.skn.simplemvpdeom;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.Toast;import com.bwie.skn.simplemvpdeom.presenter.LoginPresenter;import com.bwie.skn.simplemvpdeom.view.LoginView;public class MainActivity extends AppCompatActivity implements LoginView {    private EditText etName;    private EditText etPassword;    private LoginPresenter loginPresenter;    private ProgressBar progressBar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化属性        etName = (EditText) findViewById(R.id.etName);        etPassword = (EditText) findViewById(R.id.etPassword);        progressBar = (ProgressBar) findViewById(R.id.loginBar);        //login登录        loginPresenter = new LoginPresenter(MainActivity.this);    }    public void btnLogin(View view){        loginPresenter.verifyUserInfo(etName.getText().toString(),etPassword.getText().toString());    }    @Override    public void showProgress() {        progressBar.setVisibility(View.VISIBLE);    }    @Override    public void hindProgress() {        progressBar.setVisibility(View.GONE);    }    @Override    public void setUserNameError() {        etName.setError("用户不能为空");        progressBar.setVisibility(View.GONE);    }    @Override    public void setUserPasswordError() {        etPassword.setError("密码不能为空");        progressBar.setVisibility(View.GONE);    }    @Override    public void navigationToHome() {        Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();        Intent intent = new Intent(MainActivity.this, ListViewAdapter.class);        startActivity(intent);        finish();    }}

------------------接口LoginView

package com.bwie.skn.simplemvpdeom.view;/** * author:Created by WangZhiQiang on 2017/12/5. */public interface LoginView {    //显示进度条    void showProgress();    //隐藏进度条    void hindProgress();    //处理用户的输入框的情况    void setUserNameError();    void setUserPasswordError();    //导航栏    void navigationToHome();}

2.--------------presenter层

package com.bwie.skn.simplemvpdeom.presenter;import com.bwie.skn.simplemvpdeom.model.LoginModel;import com.bwie.skn.simplemvpdeom.view.LoginView;/** * author:Created by WangZhiQiang on 2017/12/5. */public class LoginPresenter implements OnLoginFinishListener{    private LoginView loginView;    private final LoginModel loginModel;    public LoginPresenter(LoginView loginView){        this.loginView = loginView;        loginModel = new LoginModel();    }    public void verifyUserInfo(String username,String userpassword){        if (null != loginView ){            loginView.showProgress();        }        //向服务器中发送请求        loginModel.verifyUserInfo(username,userpassword,this);    }    @Override    public void setUserNameError() {        loginView.setUserNameError();    }    @Override    public void setUserPasswordErrpr() {        loginView.setUserPasswordError();    }    @Override    public void onSuccess() {        loginView.hindProgress();        //跳到主页        loginView.navigationToHome();    }    @Override    public void onFailed() {        loginView.hindProgress();    }}

---------------------p接口

package com.bwie.skn.simplemvpdeom.presenter;/** * author:Created by WangZhiQiang on 2017/12/5. */public interface OnLoginFinishListener {    //处理用户的输入框的情况    void setUserNameError();    void setUserPasswordErrpr();    void onSuccess();    void onFailed();}


3.-----------M层

package com.bwie.skn.simplemvpdeom.model;import android.text.TextUtils;import android.util.Log;import com.bwie.skn.simplemvpdeom.utils.LoginCallBack;import com.bwie.skn.simplemvpdeom.presenter.OnLoginFinishListener;import com.bwie.skn.simplemvpdeom.utils.Constant;import com.bwie.skn.simplemvpdeom.utils.OKHttpUtils;import org.json.JSONException;import org.json.JSONObject;import java.util.HashMap;/** * author:Created by WangZhiQiang on 2017/12/5. */public class LoginModel {    public void verifyUserInfo(String username, String userpassword, final OnLoginFinishListener onLoginFinishListener){        if (TextUtils.isEmpty(username)){            onLoginFinishListener.setUserNameError();            return;        }        if (TextUtils.isEmpty(userpassword)){            onLoginFinishListener.setUserPasswordErrpr();            return;        }        //添加请求参数        HashMap<String, String> map = new HashMap<>();        map.put("mobile",username);        map.put("password",userpassword);        //调用olHttpUtils工具类中的方法        OKHttpUtils.getInstance().doGet(Constant.LOGIN, map, new LoginCallBack() {            @Override            public void onSuccess(String msg) {                //解析JSON                try {                    JSONObject jobj = new JSONObject(msg);                    String result = jobj.getString("msg");                    Log.e("SKN","M++"+result);                    if (result.trim().equals("登录成功")){                        Log.e("SKN","M登录成功");                        onLoginFinishListener.onSuccess();                    }else{                        onLoginFinishListener.onFailed();                        Log.e("SKN","M登录失败");                    }                } catch (JSONException e) {                    e.printStackTrace();                }            }            @Override            public void onFailed(String msg) {                onLoginFinishListener.onFailed();            }        });    }}

-----------Util-M接口
package com.bwie.skn.simplemvpdeom.model;/** * author:Created by WangZhiQiang on 2017/12/5. */public interface LoginCallBack {    void onSuccess(String msg);    void onFailed(String msg);}


--------------Utils---OK封装

package com.bwie.skn.simplemvpdeom.utils;import android.os.Handler;import android.util.Log;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * author:Created by WangZhiQiang on 2017/12/5. */public class OKHttpUtils {    private static OKHttpUtils okHttpUtils;    private static Handler handler = new Handler();    //私有化构造方法    private OKHttpUtils(){    }    /**     * 获取OKhttpClient实例化     */    public static OKHttpUtils getInstance(){        if(null == okHttpUtils){            synchronized (OKHttpUtils.class){                if (null == okHttpUtils){                    okHttpUtils = new OKHttpUtils();                }            }        }        return okHttpUtils;    }    /**     *  封装的异步Get请求     */    public void doGet(String path, Map<String,String>map, final LoginCallBack loginCallBack){        //创建一个字符串容器        StringBuilder sb = null;        for (String key:map.keySet()){            if (null == sb){                sb = new StringBuilder();                sb.append("?");            }else{                sb.append("&");            }            sb.append(key).append("=").append(map.get(key));        }        Request request = new Request.Builder()                .url(path+sb.toString())                .get()                .build();        //OKHttp 网络        OkHttpClient okHttpClient = new OkHttpClient();        Call call = okHttpClient.newCall(request);        //异步请求        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                //请求失败                loginCallBack.onFailed(e.getMessage());                Log.e("SKN","OK请求失败");            }            @Override            public void onResponse(Call call, final Response response) throws IOException {                //请求成功                handler.post(new Runnable() {                    @Override                    public void run() {                        try {                            loginCallBack.onSuccess(response.body().string());                            Log.e("SKN","OK请求成功");                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                });            }        });    }}

----------------网络路径封装

Constant

package com.bwie.skn.simplemvpdeom.utils;/** * author:Created by WangZhiQiang on 2017/12/5. */public class Constant {    private static final String HOST = "http://120.27.23.105/";    public static final String LOGIN = HOST+"user/login";}

---------------从网络读取

package com.bwie.skn.simplemvpdeom.utils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;/** * author:Created by WangZhiQiang on 2017/12/5. */public class StreamTools {    public static String readFromNetWork(InputStream is){        try {            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();            byte[] buffer = new byte[1024];            int len = 0;            while ((len=is.read(buffer))!=-1){                byteArrayOutputStream.write(buffer,0,len);            }        } catch (IOException e) {            e.printStackTrace();        }        return null;    }}

**********Gson单利模式

public class GsonUtils {    private static Gson gson;        public static Gson getInstance(){            if(gson==null){                gson=new Gson();            }            return gson;        }}




 
阅读全文
0 0
原创粉丝点击