Login Model

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

提示 :

  • setOkHttpClientsetRetrofit方法必須要初化
  • 當(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.**{*;}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末件甥,一起剝皮案震驚了整個濱河市矾飞,隨后出現(xiàn)的幾起案子缸榄,更是在濱河造成了極大的恐慌,老刑警劉巖阵面,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闪萄,死亡現(xiàn)場離奇詭異泞当,居然都是意外死亡迹蛤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門襟士,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笤受,“玉大人,你說我怎么就攤上這事敌蜂÷崾蓿” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵章喉,是天一觀的道長汗贫。 經(jīng)常有香客問我,道長秸脱,這世上最難降的妖魔是什么落包? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮摊唇,結(jié)果婚禮上咐蝇,老公的妹妹穿的比我還像新娘。我一直安慰自己巷查,他們只是感情好有序,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岛请,像睡著了一般旭寿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崇败,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天盅称,我揣著相機(jī)與錄音,去河邊找鬼后室。 笑死缩膝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岸霹。 我是一名探鬼主播疾层,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼松申!你這毒婦竟也來了云芦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤贸桶,失蹤者是張志新(化名)和其女友劉穎舅逸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皇筛,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡琉历,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了水醋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旗笔。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拄踪,靈堂內(nèi)的尸體忽然破棺而出蝇恶,到底是詐尸還是另有隱情,我是刑警寧澤惶桐,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布撮弧,位于F島的核電站,受9級特大地震影響姚糊,放射性物質(zhì)發(fā)生泄漏贿衍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一救恨、第九天 我趴在偏房一處隱蔽的房頂上張望贸辈。 院中可真熱鬧,春花似錦肠槽、人聲如沸擎淤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揉燃。三九已至,卻和暖如春筋栋,著一層夾襖步出監(jiān)牢的瞬間炊汤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工弊攘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留抢腐,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓襟交,卻偏偏與公主長得像迈倍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捣域,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,310評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理啼染,服務(wù)發(fā)現(xiàn)宴合,斷路器,智...
    卡卡羅2017閱讀 134,711評論 18 139
  • 昨天是七夕迹鹅,中國情人節(jié)卦洽,就像每一個和戀人有關(guān)的日子一樣撩人。 而她卻也是“寥人”斜棚,寂寥的寥阀蒂。 當(dāng)一個人心里住著一個...
    老野閱讀 212評論 0 0
  • 關(guān)于筆記法,在天津行動派伙伴圈的抱樸書薈當(dāng)中有過一期主題閱讀以及拆書的線下活動弟蚀,參與過的伙伴可能對這個技能有所了解...
    西柚eeeeer柚西閱讀 858評論 0 5
  • 【幸福女孩 唐墨軒 一年級 堅持原創(chuàng)分享第41天 2017.10.13 星期五】 今天下午蚤霞,學(xué)校進(jìn)行了少先...
    何亞珂閱讀 228評論 1 0