您的位置:首页 > 理论基础 > 计算机网络

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

2017-12-06 08:21 232 查看
一:使用前导入依赖

[java] view
plain copy

compile 'com.squareup.okhttp3:okhttp:3.9.0'  

二:需要的权限

[java] view
plain copy

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

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

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

    <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;
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: