0

安卓工作室 3.4 版

应用程序/build.gradle:

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 28
        versionCode 427
        versionName "2.1.427"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"


def AAVersion = '4.5.2'

dependencies {
    annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
    annotationProcessor "org.androidannotations:ormlite:$AAVersion"

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:animated-vector-drawable:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support:customtabs:28.0.0'
    implementation 'com.android.support:exifinterface:28.0.0'
    implementation 'com.android.support:support-media-compat:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'

    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.7'
    implementation 'com.google.android.gms:play-services-gcm:16.0.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.j256.ormlite:ormlite-android:5.1'
    implementation 'commons-codec:commons-codec:1.11'
    implementation 'commons-io:commons-io:2.6'
    implementation 'org.apache.commons:commons-lang3:3.8.1'
    implementation 'org.apache.httpcomponents:httpclient:4.3.6'
    implementation "org.androidannotations:androidannotations-api:$AAVersion"
    implementation "org.androidannotations:ormlite-api:$AAVersion"


    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
}


import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;

private static NotificationInvoice getNotificationInvoice(NotificationFO notification) {
        String notificationText = notification.getNotificationText();
        String payload = "";
        NotificationType type = null;
        Log.d(TAG, "check_notificationText:\n" + notificationText);
        List<NameValuePair> params = URLEncodedUtils.parse(new URI(notificationText), "UTF-8");
        Log.d(TAG, "check_params(" + params.size() + "):\n" + params);
}

Android 6.0中,“ notificationText”成功解析为 L ist<NameValuePair>

check_notificationText:
http://11.1.1:54401/notify?receiver=testok&system=factura_mobile&device_type=android&type=invoice&payload=11111;0000000;5.55;2019-05-16;2019-05-16;ecb6f683-63b3-4efd-b8c3-0877f1aeae8d

check_params(5):
receiver=testok, system=factura_mobile, device_type=android, type=invoice, payload=11111;0000000;5.55;2019-05-16;2019-05-16;ecb6f683-63b3-4efd-b8c3-0877f1aeae8d

如您所见,参数“ payload” =11111;0000000;5.55;2019-05-16;2019-05-16;ecb6f683-63b3-4efd-b8c3-0877f1aeae8d

很好,它是正确的。

但在Android 9.0上,“ notificationText解析不成功

check_notificationText:
http://11.11.11.11:54401/notify?receiver=22222222222222&system=factura_mobile&device_type=android&type=invoice&payload=3c55ba74-a85e-401b-8c1c-40ca83947768;0000000;5.55;2019-05-16;2019-05-16;1a87fb32-4543-4111-89a4-e150a7f71168

check_params(10):
[receiver=22222222222222, system=factura_mobile, device_type=android, type=invoice, payload=3c55ba74-a85e-401b-8c1c-40ca83947768, 0000000, 5.55, 2019-05-16, 2019-05-16, 1a87fb32-4543-4111-89a4-e150a7f71168]
getNotificationInvoice_FOUND_PAYLOAD -> set_to_payload_param.getValue = 3c55ba74-a85e-401b-8c1c-40ca83947768

如您所见,参数“ payload” =3c55ba74-a85e-401b-8c1c-40ca83947768但必须是

3c55ba74-a85e-401b-8c1c-40ca83947768;0000000;5.55;2019-05-16;2019-05-16;1a87fb32-4543-4111-89a4-e150a7f71168

为什么URLEncodedUtils不正确解析 Android 9.0 中的文本?

4

1 回答 1

1

Try to use Java in-built method java.net.URLEncoder

URLEncodedUtils is deprecated in Android API 22+

List<NameValuePair> params = URLEncoder.encode(notificationText, "UTF-8");
于 2019-05-15T13:35:51.533 回答