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
------------------接口LoginView
2.--------------presenter层
---------------------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层
-----------Util-M接口
--------------Utils---OK封装
----------------网络路径封装
Constant
---------------从网络读取
**********Gson单利模式
[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; } }
相关文章推荐
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- Mvp设计模式实现okHttpClient请求展示在RecycleView
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- 简单MVP框架(OKHTTP请求数据)
- mvp(okhttp)请求图片与数据
- mvp(okhttp)图片与数据请求
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Android之MVP模式实现登录和网络数据加载
- MVP注册登录+OkHttp网络请求+展示数据
- 登录百度首页的HTTP请求过程具体分析,重点为包体数据
- MVP模式的OKhttp请求网络数据,xrecyclerview上拉刷新,下拉加载
- OkHttpClient请求网络数据
- MVP模式下使用Retrofit集合RxJava请求数据
- Android之MVP模式实现登录和网络数据加载
- 电商项目---Okhttp网络请求及单列模式
- OKhttp2.6强制请求缓存,通过反射自由读取缓存数据
- OkHttpClient post请求今日头条数据 RecycleView显示
- 网络请求数据添加到列表(okhttp+RecyclerView)
- MVP模式使用Retrofit+RxJAVA请求数据实现购物车