Skip to content

Commit

Permalink
Add the auto token refresh demo.
Browse files Browse the repository at this point in the history
  • Loading branch information
alighters committed Aug 21, 2016
1 parent bd9f3fb commit a7266be
Show file tree
Hide file tree
Showing 23 changed files with 878 additions and 5 deletions.
17 changes: 15 additions & 2 deletions app/build.gradle
Expand Up @@ -21,13 +21,26 @@ android {
sourceSets.main {
jniLibs.srcDirs = ['src/main/libs'] // <-- Set your folder here!
}

}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'

// view
compile 'com.android.support:appcompat-v7:23.4.0'


compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.google.code.gson:gson:2.5'
compile 'io.reactivex:rxjava:1.1.9'
compile 'io.reactivex:rxandroid:1.2.1'

// test
testCompile 'junit:junit:4.12'
}
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lighters.demos">

<uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
Expand All @@ -21,6 +23,8 @@
android:theme="@style/TranslucentTheme"/>

<activity android:name=".jni.JniTestActivity"/>

<activity android:name=".token.TokenTestActivity"/>
</application>

</manifest>
6 changes: 6 additions & 0 deletions app/src/main/java/com/lighters/demos/MainActivity.java
Expand Up @@ -6,6 +6,7 @@
import com.lighters.demos.anim.FirstActivity;
import com.lighters.demos.app.base.BaseActivity;
import com.lighters.demos.jni.JniTestActivity;
import com.lighters.demos.token.TokenTestActivity;

public class MainActivity extends BaseActivity {

Expand Down Expand Up @@ -33,4 +34,9 @@ void gotoAnimScreen() {
void gotoJniTest() {
startActivity(new Intent(this, JniTestActivity.class));
}

@OnClick(R.id.btn_token_test)
void gotoTokenTest() {
startActivity(new Intent(this, TokenTestActivity.class));
}
}
Expand Up @@ -17,6 +17,7 @@
package com.lighters.demos.app.base;

import android.app.Application;
import android.content.Context;

/**
* Created by david on 16/7/27.
Expand All @@ -25,8 +26,16 @@
*/
public class BaseApplication extends Application {

private static Context mContext;

@Override
public void onCreate() {
super.onCreate();
mContext = this;
}


public static Context getContext(){
return mContext;
}
}
107 changes: 107 additions & 0 deletions app/src/main/java/com/lighters/demos/token/TokenTestActivity.java
@@ -0,0 +1,107 @@
/*
* Copyright (C) 2016 david.wei (lighters)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.lighters.demos.token;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import butterknife.OnClick;
import com.lighters.demos.R;
import com.lighters.demos.app.base.BaseActivity;
import com.lighters.demos.token.http.GlobalToken;
import com.lighters.demos.token.http.RetrofitUtil;
import com.lighters.demos.token.http.api.IApiService;
import com.lighters.demos.token.http.api.ResultModel;
import com.lighters.demos.token.http.api.TokenModel;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
* Created by david on 16/8/21.
* Email: huangdiv5@gmail.com
* GitHub: https://github.com/alighters
*/
public class TokenTestActivity extends BaseActivity {
@Override
protected int getLayoutId() {
return R.layout.activity_token_test;
}

@Override
protected void setView(Bundle savedInstanceState) {

}

@Override
protected void initData() {
}

@OnClick(R.id.btn_token_get)
public void onGetTokenClick(View v) {
RetrofitUtil.getInstance()
.get(IApiService.class)
.getToken()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<TokenModel>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(TokenModel model) {
if (model != null && !TextUtils.isEmpty(model.token)) {
GlobalToken.updateToken(model.token);
}
}
});
}

@OnClick(R.id.btn_request)
public void onRequestClick(View v) {
for (int i = 0; i < 5; i++) {
RetrofitUtil.getInstance()
.getProxy(IApiService.class)
.getResult(GlobalToken.getToken())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ResultModel>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(ResultModel model) {

}
});
}
}
}
34 changes: 34 additions & 0 deletions app/src/main/java/com/lighters/demos/token/http/GlobalToken.java
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2016 david.wei (lighters)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.lighters.demos.token.http;

/**
* Created by david on 16/8/21.
* Email: huangdiv5@gmail.com
* GitHub: https://github.com/alighters
*/
public class GlobalToken {
private static String sToken;

public static synchronized void updateToken(String token) {
sToken = token;
}

public static String getToken() {
return sToken;
}
}
81 changes: 81 additions & 0 deletions app/src/main/java/com/lighters/demos/token/http/RetrofitUtil.java
@@ -0,0 +1,81 @@
/*
* Copyright (C) 2016 david.wei (lighters)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.lighters.demos.token.http;

import com.lighters.demos.token.http.converter.GsonConverterFactory;
import com.lighters.demos.token.http.proxy.ProxyHandler;
import java.lang.reflect.Proxy;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;

/**
* Created by david on 16/8/19.
* Email: huangdiv5@gmail.com
* GitHub: https://github.com/alighters
*/
public class RetrofitUtil {

public static final String API = "http://192.168.56.1:8888/";

private static Retrofit sRetrofit;
private static RetrofitUtil instance;

private final static Object mRetrofitLock = new Object();

private static Retrofit getRetrofit() {
if (sRetrofit == null) {
synchronized (mRetrofitLock) {
if (sRetrofit == null) {
OkHttpClient.Builder clientBuilder = new OkHttpClient().newBuilder();

HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
clientBuilder.addInterceptor(httpLoggingInterceptor);
sRetrofit = new Retrofit.Builder().client(clientBuilder.build())
.baseUrl(API)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
}
}
return sRetrofit;
}

public static RetrofitUtil getInstance() {
if (instance == null) {
synchronized (RetrofitUtil.class) {
if (instance == null) {
instance = new RetrofitUtil();
}
}
}
return instance;
}

public <T> T get(Class<T> tClass) {
return getRetrofit().create(tClass);
}

@SuppressWarnings("unchecked")
public <T> T getProxy(Class<T> tClass) {
T t = getRetrofit().create(tClass);
return (T) Proxy.newProxyInstance(tClass.getClassLoader(), new Class<?>[] { tClass }, new ProxyHandler(t));
}
}
32 changes: 32 additions & 0 deletions app/src/main/java/com/lighters/demos/token/http/api/ApiModel.java
@@ -0,0 +1,32 @@
/*
* Copyright (C) 2016 david.wei (lighters)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.lighters.demos.token.http.api;

import com.google.gson.annotations.SerializedName;

/**
* Created by david on 16/8/21.
* Email: huangdiv5@gmail.com
* GitHub: https://github.com/alighters
*/
public class ApiModel<T> {

public boolean success;
@SerializedName("error_code") public int errorCode;

public T data;
}
27 changes: 27 additions & 0 deletions app/src/main/java/com/lighters/demos/token/http/api/ErrorCode.java
@@ -0,0 +1,27 @@
/*
* Copyright (C) 2016 david.wei (lighters)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.lighters.demos.token.http.api;

/**
* Created by david on 16/8/21.
* Email: huangdiv5@gmail.com
* GitHub: https://github.com/alighters
*/
public class ErrorCode {
public static final int TOKEN_NOT_EXIST = 1000;
public static final int TOKEN_INVALID = 1001;
}

0 comments on commit a7266be

Please sign in to comment.