1.分包效果

bean包:json格式转成java代码

MVP

model层:loginModel
package com.jia.logindemo.model;

import com.google.common.io.CharStreams;
import com.google.gson.Gson;
import com.jia.logindemo.HttpCallBack;
import com.jia.logindemo.bean.JsonBean;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class LoginModel {
public void login(String phone, String password, final HttpCallBack httpCallBack){
//获取网址final String data = "http://www.zhaoapi.cn/user/login";//子线程解析new Thread(){@Overridepublic void run() {super.run();try {URL url = new URL(data);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(3000);int code = connection.getResponseCode();if(code == HttpURLConnection.HTTP_OK){InputStream inputStream = connection.getInputStream();String s = CharStreams.toString(new InputStreamReader(inputStream, "UTF-8"));Gson gson = new Gson();JsonBean jsonBean = gson.fromJson(s,JsonBean.class);//getCode是json数据里的数据(成功返回code)  msg同理if(jsonBean.getCode() == 0){httpCallBack.onSuccess(jsonBean.getData());}else{httpCallBack.onFailer(jsonBean.getMsg());}}} catch (Exception e) {e.printStackTrace();}}}.start();try {Thread.sleep(3000);//写死数据if(phone.equals("aaaaaa")&&password.equals("123456")){httpCallBack.onSuccess("登陆成功");}else{httpCallBack.onFailer("登陆失败");}} catch (Exception e) {e.printStackTrace();}
}

}
Presenter层LoginPresenter
package com.jia.logindemo.presenter;

import com.jia.logindemo.HttpCallBack;
import com.jia.logindemo.model.LoginModel;
import com.jia.logindemo.view.LoginView;

public class LoginPresenter {
private LoginView loginView;
private LoginModel loginModel;

public LoginPresenter(LoginView loginView) {this.loginView = loginView;loginModel = new LoginModel();
}
public void login(String phone,String password){loginModel.login(phone, password, new HttpCallBack() {@Overridepublic void onSuccess(String result) {loginView.onSuccess(result);}@Overridepublic void onFailer(String msg) {loginView.onFailer(msg);}});
}

}
HttpCallBack接口
package com.jia.logindemo;

public interface HttpCallBack {
//返回成功或失败
void onSuccess(String result);
void onFailer(String msg);
}

View层 LoginView
package com.jia.logindemo.view;

public interface LoginView {
void onSuccess(String result);
void onFailer(String msg);
}
LoginActivity
package com.jia.logindemo;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.jia.logindemo.presenter.LoginPresenter;
import com.jia.logindemo.view.LoginView;
//实现LoginView会实现LoginView里面所有的方法
public class LoginActivity extends AppCompatActivity implements LoginView {

private EditText login_number;
private EditText login_password;
private Button login;
private Button register;
private LoginPresenter loginPresenter;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);initView();initListener();//实例化LoginPresenterloginPresenter = new LoginPresenter(this);
}private void initListener() {login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String phonenumber = login_number.getText().toString().trim();String password = login_password.getText().toString().trim();//调用loginPresenterloginPresenter.login(phonenumber,password);}});register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);startActivity(intent);}});
}private void initView() {login_number = findViewById(R.id.login_number);login_password = findViewById(R.id.login_password);login = findViewById(R.id.login);register = findViewById(R.id.register);
}
//LoginView里面的方法
@Override
public void onSuccess(String result) {//登陆成功会保存数据 第二次直接进入SharedPreferences sharedPreferences = getSharedPreferences(Constant.APP_CONFIG, Context.MODE_PRIVATE);SharedPreferences.Editor edit = sharedPreferences.edit();edit.putBoolean(Constant.IS_LOGIN,true);edit.commit();Intent intent = new Intent(this,MainActivity.class);startActivity(intent);finish();
}@Override
public void onFailer(String msg) {runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(LoginActivity.this,"登录失败",Toast.LENGTH_SHORT).show();}});
}

}

注册与登陆一样 CV改名字改网址

生成二维码

build.grade文件中添加依赖
implementation ‘cn.bingoogolapple:bga-qrcode-zxing:1.3.4’

Java代码
package com.jia.logindemo;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import cn.bingoogolapple.qrcode.core.BGAQRCodeUtil;
import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.QRCodeEncoder;
//添加依赖后实现QRCodeView.Delegate
public class MainActivity extends AppCompatActivity implements QRCodeView.Delegate {

private EditText erweima;
private Button bt_click;
private ImageView ivImage;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();bt_click.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {onCreateQRCode();}});
}private void onCreateQRCode() {//子线程生成二维码new AsyncTask<String, Integer, Bitmap>() {@Overrideprotected Bitmap doInBackground(String... strings) {String QRCode = erweima.getText().toString().trim();//获取要生成的二维码中间的LOGOBitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);return QRCodeEncoder.syncEncodeQRCode(QRCode,BGAQRCodeUtil.dp2px(MainActivity.this,150),Color.BLACK,bitmap);}@Overrideprotected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);if(bitmap!=null){ivImage.setImageBitmap(bitmap);}else{Toast.makeText(MainActivity.this,"生成二维码失败",Toast.LENGTH_SHORT).show();}}}.execute();
}private void initView() {erweima = findViewById(R.id.erweima);bt_click = findViewById(R.id.bt_click);ivImage = findViewById(R.id.ivImage);
}@Override
public void onScanQRCodeSuccess(String result) {}@Override
public void onCameraAmbientBrightnessChanged(boolean isDark) {}@Override
public void onScanQRCodeOpenCameraError() {}

}

自定义全部异常捕获类

自定义异常捕获类
package com.jia.logindemo;

import android.content.Context;
import android.os.Process;
import android.util.Log;

public class UnCatchExceptionHandler implements Thread.UncaughtExceptionHandler {

private Context context;
private Thread.UncaughtExceptionHandler exceptionHandler;//系统的默认异常处理类
private static  UnCatchExceptionHandler instance = new UnCatchExceptionHandler();//用户自定义的异常处理类
private UnCatchExceptionHandler(){}
public static UnCatchExceptionHandler getInstance(){return instance;
};
public void init(Context context){this.context = context.getApplicationContext();exceptionHandler = Thread.getDefaultUncaughtExceptionHandler();Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread t, Throwable e) {//打log判断一下是否收集到异常Log.d("-----------",e.toString());//如果系统提供了异常处理类,则交给系统去处理if(exceptionHandler!=null){exceptionHandler.uncaughtException(t,e);}else {Process.killProcess(Process.myPid());}
}

}
新建一个类继承Application

package com.jia.logindemo;

import android.app.Application;

import com.tencent.bugly.crashreport.CrashReport;

public class GenAndApplication extends Application {

@Override
public void onCreate() {super.onCreate();//使用自定义全局异常捕获类UnCatchExceptionHandler.getInstance().init(this);
}

}

把异常提交到bugly
接上面

public class GenAndApplication extends Application {

@Override
public void onCreate() {super.onCreate();UnCatchExceptionHandler.getInstance().init(this);     CrashReport.initCrashReport(getApplicationContext(),"ec2de502e2",true);
}

}

ec2de502e2是提交到bugly后自动生成的 然后CV到代码里

清单文件中添加
<uses-permission android:name=“android.permission.READ_PHONE_STATE” /
<uses-permission android:name=“android.permission.INTERNET” /
<uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE” /
<uses-permission android:name=“android.permission.ACCESS_WIFI_STATE” /
<uses-permission android:name=“android.permission.READ_LOGS”/
tools:ignore=“ProtectedPermissions” /

build.grade中添加
implementation ‘com.tencent.bugly:crashreport:latest.release’
//其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9
implementation ‘com.tencent.bugly:nativecrashreport:latest.release’
//其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0

添加ndk
ndk { abiFilters ‘armeabi’,‘x86’,‘armeabi-v7a’,‘x86_64’,‘arm64-v8a’ }

MVP登录和注册页面Activity类 生成二维码 异常捕获类相关推荐

  1. PHP基于phpqrcode类生成二维码

    使用ThinkPHP框架引入phpqrcode类生成二维码后,发现每次必须通过TP框架生成,略显繁琐,打算写一个简单的方法,然后运行php后直接批量生成二维码.方法也简单,直接写个PHP脚本,然后引入 ...

  2. 用ZXING生成二维码的工具类(可以去掉白边,添加logo)

    ===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)========================== /**  * @auther g ...

  3. hutool工具类生成二维码案例

    hutool工具类生成二维码案例 一.环境: 添加hutool工具类依赖,hutool生成二维码是利用Google的zixing,而且不是强依赖,所以还需引入zxing依赖 <dependenc ...

  4. phpqrcode类生成二维码详解

    本文实例讲述了PHP基于phpqrcode类生成二维码的方法.分享给大家供大家参考,具体如下: 使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www ...

  5. 在web页面上快速生成二维码的三种实用方法

    转载自:在web页面上快速生成二维码的三种实用方法 二维码是桌面和移动端快速分享的高效手段之一,这里介绍两个不错的快速开发二维码的方法,和大家分享一下~~ 方法1:使用极客标签提供的二维码快速生成服务 ...

  6. java通过QR生成二维码 (QRCodeUtils工具类)(HUTOOL生成二维码)

    1.简述 二维码生成关键是QR,QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化 详情简介请看 2.工具类 package com.lingxu.bas ...

  7. thinkphp使用phpqrcode类生成二维码

    phpqrcode类文件下载 下载地址:https://sourceforge.net/projects/phpqrcode/ PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态) 具体使 ...

  8. PHP基于phpqrcode类生成二维码的方法详解

    前期准备: 1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都 ...

  9. 用Java写一个工具类生成二维码

    首先需要在pom.xml里添加zxing依赖 <dependency><groupId>com.google.zxing</groupId><artifact ...

最新文章

  1. 【干货】计算机视觉中的数据预处理与模型训练技巧总结
  2. C#访问远程主机资源的方法
  3. pythonurllib模块-python3之模块urllib
  4. 为节省内存,Firefox 将用新方式阻止加载没用到的标签页
  5. 腾讯大数据星火计划--Angel技术沙龙 对外报名正式启动!
  6. MySQL查询语句后面加上“\G”,提示 ERROR: No query specified
  7. python email模块写邮件_python常用模块email----创建简单的文本邮件并发送
  8. nginxlua文件服务器权限,通过lua进行nginx的权限控制
  9. 软件项目经理的心得和经验总结
  10. 杭电2391--Filthy Rich(DP)
  11. MATLAB R2016a 简单介绍
  12. FFmpeg结构体分析: AVCodecContext编解码器上下文
  13. 浅谈Single-Pass算法
  14. 使用fontforge精简字体文件
  15. java.lang.IllegalStateException: Failed to convert message:‘‘ to outbound message.
  16. 微信小程序:修改单选radio大小样式
  17. 关于timeSetEvent的精确度缺陷分析_备份以防后续使用到时作为参考
  18. java mye_JAVA环境搭建之MyEclipse10+jdk1.8+tomcat8环境搭建详解
  19. 在线协作文档综合评测 :金山文档、腾讯文档、石墨文档
  20. ▷Scratch资讯丨华为达芬奇计划

热门文章

  1. nofollow标签_网站Nofollow标签的应用场景
  2. go数据结构与算法| 稀疏数组
  3. VMware vCenter 资源池
  4. CVE-2020-16875: Microsoft Exchange远程代码执行漏洞通告
  5. vSphere Datacenter设计– vSphere 6.0中的vCenter体系结构更改–第1部分
  6. Spring Boot学习总结(28)—— springboot连接postgresql 指定模式Schema
  7. Redis学习总结(22)——Redis的主从复制是如何做的?复制过程中也会产生各种问题?
  8. Mysql学习总结(40)——MySql之Select用法汇总
  9. 2012年12月第三个周末
  10. Rushcrm:CRM系统怎么让企业如此青睐?