Login Model
Library工程是 用戶模塊 包含用戶信息
- 登陸操作并保存用戶信息到數(shù)據(jù)庫
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
初始化
創(chuàng)建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 協(xié)議需要添加
<br />
創(chuàng)建 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;
}
底層網(wǎng)絡(luò)庫使用OkHttp
- 使用
HttpLoggingInterceptor
提供日志打印功能 - 使用
StethoInterceptor
提供Chrome后臺打印功能
<br />
創(chuàng)建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 進(jìn)行Restful網(wǎng)絡(luò)請求
- 添加
ScalarsConverterFactory.create()
支持Retrofit
返回 String 類型 - 添加
GsonConverterFactory.create()
支持 Gson 庫進(jìn)行對象轉(zhuǎn)換 - 添加
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
方法必須要初化 - 當(dāng)項目中需要增加日志功能可以使用
setL
方法進(jìn)行注冊
<br />
在AndroidManifest.xml
文件中增加:
<activity android:name="com.gt.common.login.ui.LoginActivity" />
<br />
需要的權(quán)限:
<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
調(diào)用登陸接口
initLogin();
findViewById(R.id.login).setOnClickListener(v -> {
LoginActivity.start(getBaseContext());
});
提示 : 當(dāng)前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 />
提示 : 如果當(dāng) Model 工程沒有安裝
Realm
數(shù)據(jù)庫環(huán)境請參照以下:
- 根目錄
build.gradle
增加
classpath "io.realm:realm-gradle-plugin:2.2.1"
- 當(dāng)前 Model 工程的
build.gradle
增加
apply plugin: 'realm-android'
<br />
代碼混淆
-dontwarn com.gt.common.login.**
-keep class com.gt.common.login.**{*;}