java شرح - com.google.android.gms.common.internal.safe parcel.safe parcelable not found



firebase cloud (6)

أحاول إضافة خدمات إشعارات إلى تطبيقي باستخدام FCM وبرنامج تعليمي تم تقديمه على https://www.simplifiedcoding.net/firebase-cloud-messaging-android/ كل شيء قد تم إجراؤه ويعمل مثل الحصول على الرمز المميز وما إلى ذلك ولكن الآن بعد إنشاء معالج المراسلة ، لقد بدأت في الحصول على خطأ:

Error:(22, 26) error: cannot access AbstractSafeParcelable
class file for com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable not found

وفشل البناء. دليل الثابتة والمتنقلة. كود ل gradle هو:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }

    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'


repositories {
    maven { url 'https://maven.fabric.io/public' }
    maven {
        url "https://s3-ap-southeast-1.amazonaws.com/godel-release/godel/"
    }
}


android {
    compileSdkVersion 25
    buildToolsVersion "24.0.3"
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        applicationId "jss.smartapp"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {

            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }


    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
    compile files('libs/activation.jar')
    compile files('libs/additionnal.jar')
//Apache IO
    compile files('libs/commons-io-2.5.jar')
    compile 'com.android.support:design:25.0.0'
    compile 'com.android.support:appcompat-v7:25.0.0'
//Crashlytics
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') {
        transitive = true;
    }
    //Dropbox
    compile 'com.dropbox.core:dropbox-core-sdk:2.0.1'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup.okhttp:okhttp:2.4.0'
//FTP
    compile files('libs/ftp4j-1.7.2.jar')
//Http
    compile 'com.squareup.okhttp3:okhttp:3.4.2'
//Instamojo
    compile 'com.instamojo:android-sdk:+'
//Material Design Didalogs
    compile 'com.afollestad.material-dialogs:commons:0.9.1.0'
    compile 'org.apache.httpcomponents:httpclient-android:4.3.5.1'
//GSON
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
    compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
//multidex dependency
    compile 'com.android.support:multidex:1.0.1'
    //box dependencies
    compile 'com.box:box-java-sdk:2.1.1'
    compile 'com.box:box-android-sdk:3.0.2'
//google drive dependency
    compile 'com.google.android.gms:play-services-drive:10.0.1'
    //one drive dependency
    compile('com.onedrive.sdk:onedrive-sdk-android:1.2+') {
        transitive = false
    }
    compile('com.microsoft.services.msa:msa-auth:0.8.+')
    compile('com.microsoft.aad:adal:1.1.+')

    //justify test
    compile 'com.github.bluejamesbond:textjustify-android:2.1.6'

    //image downnloader
    /*compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'*/
//Glide Image downloading
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:support-v4:25.1.0'
    compile 'com.google.firebase:firebase-messaging:9.2.1'

}
apply plugin: 'com.google.gms.google-services'

Answers

تأكد من توافق إصدار خدمة Google مع إصدار Firebase. تجميع حاليًا "com.google.android.gms: play-services-drive: 10.0.1" لا يتطابق مع الترجمة "com.google.firebase: firebase-messaging: 9.2.1" ما عليك القيام به هو تغيير "com .google.firebase: firebase-messaging: 9.2.1 'to' com.google.firebase: firebase-messaging: 10.0.1 'حتى تطابق الإصدارات.


في ملف Gradle ، يجب أن تستخدم جميع إصدارات google-play-service و firebase نفس الإصدار .

كما كنت تستخدم:

 compile 'com.google.android.gms:play-services-drive:10.0.1'

يجب عليك استخدام:

compile 'com.google.firebase:firebase-messaging:10.0.1' // وليس 9.2.1


إنه خلل في Android Studio ، ولا يعرض ترقية libs تلقائيًا كما هو الحال بالنسبة إلى خدمات Play-libs.

التحديث التلقائي

compile 'com.google.android.gms:play-services-drive:10.0.1'

لا autoupdate (تحتاج إلى رفع الإصدار يدويًا بنفس طريقة تشغيل الخدمات *)

compile 'com.google.firebase:firebase-messaging:10.0.1'

ما أنقذني أخيراً:

في استوديو android ، بدّل إلى عرض Project بدلاً من عرض Android. احذف مجلد .raddle وملف gradle.properties أيضًا. قم بتنظيف المشروع. مجداف مجد مرة أخرى.

ليس لدي أي فكرة عن سبب نجاح ذلك. لا يؤدي حذف مجلد .raddle فقط إلى تنفيذ المهمة ، كما أن موقع gradle.properties الذي تم إنشاؤه حديثًا هو نفسه تمامًا مثل القديم! لكن مشكلتي ثابتة.


استخدم شيئًا كهذا:

dependencies {
    compile 'com.google.android.gms:play-services:11.0.1'
    compile 'com.google.firebase:firebase-core:11.0.1'
    compile 'com.google.firebase:firebase-messaging:11.0.1'
}
apply plugin: 'com.google.gms.google-services'

تأكد من أن تطبيق المكوِّن الإضافي يأتي ضمن الاعتماديات.


تكمن المشكلة في أن JAX-RS تملي القيام بفك تجميد المعلمات بإحدى الطريقتين التاليتين:

  1. تحتوي المعلمة bean على مُنشئ عام يقبل سلسلة
  2. يحتوي valueOf(String) المعلمة على قيمة valueOf(String) ثابتة.

في حالتك ، يتم تجزئة Date(String) عبر مُنشئ Date(String) ، الذي لا يمكنه معالجة تنسيق الإدخال الذي يرسله العميل. لديك خياران متاحان لعلاج هذا:

الخيار 1

اطلب من عميلك تغيير تنسيق التاريخ قبل إرساله. هذا هو المثل الأعلى ، ولكن من الأصعب إنجازه!

الخيار 2

التعامل مع تنسيق التاريخ مجنون. الخيارات لهذا هي:

قم بتغيير توقيع الأسلوب الخاص بك لقبول سلسلة. محاولة إنشاء كائن تاريخ من ذلك وإذا فشل ذلك ، استخدم فئة SimpleDateFormat المخصصة الخاصة بك تحليلها.

static final DateFormat CRAZY_FORMAT = new SimpleDateFormat("");

public String getData(@QueryParam("date") String dateString) {
    final Date date;
    try {
        date = new Date(dateString); // yes, I know this is a deprecated method
    } catch(Exception e) {
        date = CRAZY_FORMAT.parse(dateString);
    }
}

قم بتعريف فئة المعلمة الخاصة بك التي تقوم بالمنطق المذكور أعلاه. إعطائها منشئ سلسلة أو valueOf(String) الأسلوب الذي يستدعي المنطق. وطريقة إضافية للحصول على التاريخ عندما يقال ويفعل كل شيء.

public class DateParameter implements Serializable {
    public static DateParameter valueOf(String dateString) {
        try {
            date = new Date(dateString); // yes, I know this is a deprecated method
        } catch(Exception e) {
            date = CRAZY_FORMAT.parse(dateString);
        }
    }

    private Date date;
    // Constructor, Getters, Setters
}

public String getData(@QueryParam("date") DateParameter dateParam) {
    final Date date = dateParam.getDate();
}

أو أخيرًا ، يمكنك تسجيل معالج معلمات للتواريخ. حيث يكون المنطق هو نفسه كما هو مذكور في الخيارات الأخرى المذكورة أعلاه. لاحظ أنك تحتاج إلى استخدام CXF 2.5.3 على الأقل حتى يتم تقييم معالج المعلمة الخاص بك قبل أن يحاول اختبار التفكيك الافتراضي.

public class DateHandler implements ParameterHandler<Date> {
    public Map fromString(String s) {
        final Date date;
        try {
            date = new Date(dateString); // yes, I know this is a deprecated method
        } catch(Exception e) {
            date = CRAZY_FORMAT.parse(dateString);
        }
    }
}




java android firebase firebase-cloud-messaging