Login Model
Library工程是 用户模块 包含用户信息
- 登陆操作并保存用户信息到数据库
Setup
使用这个library工程minSdkVersion
最小版本必须 >= 16
在你工程根目录的build.gradle
文件添加:
repositories {
maven { url "http://192.168.2.63:8180/nexus/content/repositories/releases" }
}
Setup2
在你需要使用的Model工程的build.gradle
文件添加:
dependencies {
compile 'com.gt.common:great-tao-photo:1.0.0@aar'
}
Usege
初始化
创建SSLSocketFactory
对象:
public SSLSocketFactory setCertificates(InputStream... certificates) {
try {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);
int index = 0;
for (InputStream certificate : certificates) {
String certificateAlias = Integer.toString(index++);
keyStore.setCertificateEntry(certificateAlias,
certificateFactory.generateCertificate(certificate));
try {
if (certificate != null) certificate.close();
} catch (IOException e) {
}
}
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
return sslContext.getSocketFactory();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
提示 : 如果需要使用到 https 协议需要添加
<br />
创建 OkHttpClient
对象:
public OkHttpClient getOkhttp() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = null;
try {
okHttpClient = new OkHttpClient.Builder().addNetworkInterceptor(new StethoInterceptor())
.addInterceptor(interceptor)
.sslSocketFactory(setCertificates(getAssets().open("login.dev.egtcp.com.cer")))
.build();
} catch (IOException e) {
e.printStackTrace();
}
return okHttpClient;
}
底层网络库使用OkHttp
- 使用
HttpLoggingInterceptor
提供日志打印功能 - 使用
StethoInterceptor
提供Chrome后台打印功能
<br />
创建Retrofit
对象:
public Retrofit getRetrofit(OkHttpClient okHttpClient) {
Retrofit retrofit = new Retrofit.Builder().baseUrl(LoginURL.getHostURL())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(okHttpClient)
.build();
return retrofit;
}
使用 Retrofit 进行Restful网络请求
- 添加
ScalarsConverterFactory.create()
支持Retrofit
返回 String 类型 - 添加
GsonConverterFactory.create()
支持 Gson 库进行对象转换 - 添加
RxJavaCallAdapterFactory.create()
支持Rxjava库
<br />
初始化LoginConfig
对象
public void initLogin() {
OkHttpClient okHttpClient = getOkhttp();
LoginConfig.getInstance().setOkHttpClient(okHttpClient).setRetrofit(getRetrofit(okHttpClient));
LoginConfig.getInstance().setL(new L() {
@Override public void i(String msg) {
com.gt.common.hybrid.utils.L.i(msg);
}
@Override public void e(String msg) {
com.gt.common.hybrid.utils.L.e(msg);
}
});
}
提示 :
-
setOkHttpClient
和setRetrofit
方法必须要初化 - 当项目中需要增加日志功能可以使用
setL
方法进行注册
<br />
在AndroidManifest.xml
文件中增加:
<activity android:name="com.gt.common.login.ui.LoginActivity" />
<br />
需要的权限:
<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_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<br />
Example
调用登陆接口
initLogin();
findViewById(R.id.login).setOnClickListener(v -> {
LoginActivity.start(getBaseContext());
});
提示 : 当前Hello World是以Java8为事例
<br />
获取用户信息:
Realm instance = Realm.getDefaultInstance();
RealmResults<UserDB> all = instance.where(UserDB.class).findAll();
for (UserDB user : all) {
String userUsername = user.getUsername();
String password = user.getPassword();
String tgt = user.getTGT();
String token = user.getToken();
}
instance.close();
<br />
提示 : 如果当 Model 工程没有安装
Realm
数据库环境请参照以下:
- 根目录
build.gradle
增加
classpath "io.realm:realm-gradle-plugin:2.2.1"
- 当前 Model 工程的
build.gradle
增加
apply plugin: 'realm-android'
<br />
代码混淆
-dontwarn com.gt.common.login.**
-keep class com.gt.common.login.**{*;}