提交 7fdc65a0 编写于 作者: J jackjintai

android:针对urlconnection 中包含中文的字符进行encode

上级 b51592d0
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
// 引用插件
//apply plugin: 'com.didi.dokit'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
debug {
minifyEnabled false
}
release {
minifyEnabled false
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${rootProject.ext.android['kotlin_version']}"
implementation 'androidx.appcompat:appcompat:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
package com.didichuxing.doraemonkit
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.didichuxing.doraemonkit.test", appContext.packageName)
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.didichuxing.doraemonkit" />
package com.didichuxing.doraemonkit
import android.util.Log
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2020/5/15-17:49
* 描 述:
* 修订历史:
* ================================================
*/
class TestClass {
fun test() {
Log.i("TestClass", "======test======")
}
}
\ No newline at end of file
package com.didichuxing.doraemonkit
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
......@@ -71,7 +71,7 @@ import java.util.*
* Created by jintai on 2019/12/18.
* DoraemonKit 真正执行的类 不建议外部app调用
*/
internal object DoraemonKitReal {
object DoraemonKitReal {
private const val TAG = "Doraemon"
/**
......
package com.didichuxing.doraemonkit.aop.urlconnection;
import android.net.Uri;
import android.util.Log;
import com.didichuxing.doraemonkit.kit.network.okhttp.interceptor.DoraemonInterceptor;
import com.didichuxing.doraemonkit.kit.network.okhttp.interceptor.DoraemonWeakNetworkInterceptor;
import com.didichuxing.doraemonkit.kit.network.okhttp.interceptor.LargePictureInterceptor;
......@@ -8,6 +11,7 @@ import com.didichuxing.doraemonkit.okgo.DokitOkGo;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.concurrent.TimeUnit;
import okhttp3.HttpUrl;
......@@ -43,31 +47,41 @@ public class HttpUrlConnectionProxyUtil {
private static URLConnection createOkHttpURLConnection(URLConnection urlConnection) throws Exception {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
//不需要再重复添加拦截器 因为已经通过字节码主如果拦截器了
//addInterceptor(builder);
OkHttpClient mClient = builder
.retryOnConnectionFailure(true)
.readTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
.writeTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
.connectTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
.build();
String strUrl = urlConnection.getURL().toString();
// OkHttpClient.Builder builder = new OkHttpClient.Builder();
// //不需要再重复添加拦截器 因为已经通过字节码主如果拦截器了
// //addInterceptor(builder);
// OkHttpClient mClient = builder
// .retryOnConnectionFailure(true)
// .readTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
// .writeTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
// .connectTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
// .build();
//对url进行encode
String strUrl = encodeUrl(urlConnection.getURL().toString());
//Log.i("decode", decodeUrl(strUrl));
URL url = new URL(strUrl);
String protocol = url.getProtocol().toLowerCase();
if (protocol.equalsIgnoreCase("http")) {
return new ObsoleteUrlFactory.OkHttpURLConnection(url, mClient);
return new ObsoleteUrlFactory.OkHttpURLConnection(url, OkhttpClientUtil.INSTANCE.getOkhttpClient());
}
if (protocol.equalsIgnoreCase("https")) {
return new ObsoleteUrlFactory.OkHttpsURLConnection(url, mClient);
return new ObsoleteUrlFactory.OkHttpsURLConnection(url, OkhttpClientUtil.INSTANCE.getOkhttpClient());
}
return urlConnection;
}
public static String encodeUrl(String url) {
return Uri.encode(url, "-![.:/,%?&=]");
}
public static String decodeUrl(String url) {
return Uri.decode(url);
}
private static void addInterceptor(OkHttpClient.Builder builder) {
// 判断当前是否已经添加了拦截器,如果已添加则返回
for (Interceptor interceptor : builder.interceptors()) {
......
package com.didichuxing.doraemonkit.aop.urlconnection
import com.didichuxing.doraemonkit.okgo.DokitOkGo
import okhttp3.OkHttpClient
import java.util.concurrent.TimeUnit
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2020/6/17-10:25
* 描 述:将urlconnection 代理成okhttpClient
* 修订历史:
* ================================================
*/
object OkhttpClientUtil {
val okhttpClient: OkHttpClient by lazy {
OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.readTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
.writeTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
.connectTimeout(DokitOkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS)
.build()
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册