Commit 1de34f58 by cuiliang.shi

网络优化

1 parent 02686eaf
No preview for this file type
......@@ -3,6 +3,9 @@
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<compositeConfiguration>
<compositeBuild compositeDefinitionSource="SCRIPT" />
</compositeConfiguration>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
......
......@@ -5,7 +5,7 @@
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="7">
<list size="10">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
......@@ -13,18 +13,24 @@
<item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
<item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
<item index="7" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
<item index="9" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="6">
<list size="9">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
<item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
<item index="6" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
<item index="7" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
</list>
</value>
</option>
......
No preview for this file type
No preview for this file type
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":6,"versionName":"1.6","enabled":true,"outputFile":"LocationServer.apk","fullName":"release","baseName":"release"},"path":"LocationServer.apk","properties":{}}]
\ No newline at end of file
......@@ -4,6 +4,9 @@ import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import com.amap.api.maps2d.AMapUtils;
import com.amap.api.maps2d.model.LatLng;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -22,5 +25,12 @@ public class ExampleInstrumentedTest {
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.example.john.myapplication", appContext.getPackageName());
//
// LatLng wifiLatLng = new LatLng(mWifiLatitude, mWifiLongitude);
// LatLng gpsLatLng = new LatLng(mGpsLatitude, mGpsLongitude);
//
// float distance = AMapUtils.calculateLineDistance(wifiLatLng, gpsLatLng);
}
}
package com.agenew.location_server.application.api;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
public class HttpExecutor {
private OkHttpClient mOkHttpClient;
public HttpExecutor(OkHttpClient okHttpClient) {
mOkHttpClient = okHttpClient;
}
public void get(String url, Callback callback) {
Request.Builder requestBuilder = new Request.Builder().url(url);
requestBuilder.get();
execute(requestBuilder.build(), callback);
}
public void post(String url, RequestBody requestBody, Callback callback) {
Request.Builder requestBuilder = new Request.Builder().url(url);
requestBuilder.post(requestBody);
execute(requestBuilder.build(), callback);
}
public void put(String url, RequestBody requestBody, Callback callback) {
Request.Builder requestBuilder = new Request.Builder().url(url);
requestBuilder.put(requestBody);
execute(requestBuilder.build(), callback);
}
public void delete(String url, Callback callback) {
Request.Builder requestBuilder = new Request.Builder().url(url);
requestBuilder.delete();
execute(requestBuilder.build(), callback);
}
public void delete(String url, RequestBody requestBody, Callback callback) {
Request.Builder requestBuilder = new Request.Builder().url(url);
requestBuilder.delete(requestBody);
execute(requestBuilder.build(), callback);
}
public void patch(String url, RequestBody requestBody, Callback callback) {
Request.Builder requestBuilder = new Request.Builder().url(url);
requestBuilder.patch(requestBody);
execute(requestBuilder.build(), callback);
}
public void head(String url, Callback callback) {
Request.Builder requestBuilder = new Request.Builder().url(url);
requestBuilder.head();
execute(requestBuilder.build(), callback);
}
private void execute(Request request, Callback callback) {
Call call = mOkHttpClient.newCall(request);
call.enqueue(callback);
}
}
package com.agenew.location_server.application.api;
import android.util.Log;
import org.json.JSONObject;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* Created by ShiCuiliang on 2018/4/8.
* IotApi for handler get|post api url content.
*/
public class IotApi {
public static final String LOG_TAG = "IotApi";
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
private static HttpExecutor sHttpExecutor;
public static boolean sDebug = true;
private static final int TIME_OUT_WRITE = 10;
private static final int TIME_OUT_READ = 10;
private static final int TIME_OUT_CONNECT = 10;
private static String TAG = "API";
/**
* Init http client with token header.
*/
public static void init() {
OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder()
.readTimeout(TIME_OUT_READ, TimeUnit.SECONDS)
.writeTimeout(TIME_OUT_WRITE, TimeUnit.SECONDS)
.connectTimeout(TIME_OUT_CONNECT, TimeUnit.SECONDS);
try{
MyOkHttpRetryInterceptor myOkHttpRetryInterceptor = new MyOkHttpRetryInterceptor.Builder()
.executionCount(3)
.retryInterval(1000)
.build();
okHttpClientBuilder.addInterceptor(myOkHttpRetryInterceptor);
}catch (Exception e){
Log.d(TAG, e.toString());
}
sHttpExecutor = new HttpExecutor(okHttpClientBuilder.build());
}
/**
* Post.
*
* @param url the url
* @param requestBodyString the request body string
* @param callback the callback
*/
public static void post(String url, String requestBodyString, IotNetApiCallback callback){
RequestBody requestBody = RequestBody.create(JSON, requestBodyString);
sHttpExecutor.post(url, requestBody, new IotApiCallbackAdapter(callback));
}
/**
* Get.
*
* @param url the url
* @param callback the callback
*/
public static void get(String url, IotNetApiCallback callback) {
sHttpExecutor.get(url, new IotApiCallbackAdapter(callback));
Log.d(TAG, "get:" + url);
}
public static void postLocationInfo(String url, JSONObject requestContent, IotNetApiCallback callback) {
post(url, requestContent.toString() , callback);
}
private static Interceptor sTokenInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
return chain.proceed(builder.build());
}
};
}
package com.agenew.location_server.application.api;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
import okhttp3.ResponseBody;
/**
* The type Iot api callback adapter.
* extend from okttp3.
*/
class IotApiCallbackAdapter implements Callback {
private static final int MSG_SUCCESS = 0;
private static final int MSG_FAILED = 1;
private IotNetApiCallback mIotNetApiCallback;
private Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SUCCESS:
if (mIotNetApiCallback != null) {
Bundle b = msg.getData();
String response = b.getString("response");
mIotNetApiCallback.onSuccess(response);
}
break;
case MSG_FAILED:
if (mIotNetApiCallback != null) {
Bundle b = msg.getData();
Exception e = (Exception) b.getSerializable("exception");
mIotNetApiCallback.onFailed(e);
}
break;
}
}
};
public IotApiCallbackAdapter(IotNetApiCallback iotNetApiCallback) {
mIotNetApiCallback = iotNetApiCallback;
}
@Override
public void onFailure(Call call, final IOException e) {
sendFailedMessage(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
ResponseBody responseBody = response.body();
String responseString = responseBody.string();
sendSuccessMessage(responseString);
} else {
if (IotApi.sDebug) {
Log.e(IotApi.LOG_TAG, response.toString());
}
sendFailedMessage(new Exception(response.toString()));
}
}
private void sendSuccessMessage(String response) {
Message msg = mHandler.obtainMessage(MSG_SUCCESS);
Bundle b = new Bundle();
b.putString("response", response);
Log.d("response", response);
msg.setData(b);
mHandler.sendMessage(msg);
}
private void sendFailedMessage(Exception e) {
Message msg = mHandler.obtainMessage(MSG_FAILED);
Bundle b = new Bundle();
b.putSerializable("exception", e);
msg.setData(b);
mHandler.sendMessage(msg);
}
}
package com.agenew.location_server.application.api;
public interface IotNetApiCallback {
/**
* Called when the HTTP response code was 2xx.
*/
void onSuccess(String response);
/**
* Called when the request could not be executed due to cancellation, a connectivity problem,
* timeout or the HTTP response code was not 2xx.
*/
void onFailed(Exception e);
}
package com.agenew.location_server.application.api;
import java.io.IOException;
import java.io.InterruptedIOException;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
public class MyOkHttpRetryInterceptor implements Interceptor {
public int executionCount;//最大重试次数
private long retryInterval;//重试的间隔
MyOkHttpRetryInterceptor(Builder builder) {
this.executionCount = builder.executionCount;
this.retryInterval = builder.retryInterval;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = doRequest(chain, request);
int retryNum = 0;
while ((response == null || !response.isSuccessful()) && retryNum <= executionCount) {
final long nextInterval = getRetryInterval();
try {
Thread.sleep(nextInterval);
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
throw new InterruptedIOException();
}
retryNum++;
// retry the request
response = doRequest(chain, request);
}
if (response == null){
return chain.proceed(request);
}
return response;
}
private Response doRequest(Chain chain, Request request) {
Response response = null;
try {
response = chain.proceed(request);
} catch (Exception e) {
}
return response;
}
/**
* retry间隔时间
*/
public long getRetryInterval() {
return this.retryInterval;
}
public static final class Builder {
private int executionCount;
private long retryInterval;
public Builder() {
executionCount = 3;
retryInterval = 1000;
}
public MyOkHttpRetryInterceptor.Builder executionCount(int executionCount){
this.executionCount =executionCount;
return this;
}
public MyOkHttpRetryInterceptor.Builder retryInterval(long retryInterval){
this.retryInterval =retryInterval;
return this;
}
public MyOkHttpRetryInterceptor build() {
return new MyOkHttpRetryInterceptor(this);
}
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!