2015-10-12 11 views
16

पाया गया था इसलिए मैं इस तरह के Google एपीआई क्लाइंट से कनेक्ट कर रहा हूं।GoogleApiClient.connect() 'प्रकार इंटरफ़ेस होने की उम्मीद थी, लेकिन वर्चुअल

 googleApiClient = new GoogleApiClient.Builder(context) 
     .addApi(LocationServices.API) 
     .addApi(ActivityRecognition.API) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .build(); 
     googleApiClient.connect(); 

यह सटीक कोड मैं कई स्थानों पर उपयोग कर रहा हूं और यह अच्छी तरह से काम करता है। यह आपके ट्यूटोरियल्स में जो दिखाई देता है उससे अलग नहीं है। लेकिन अब:

java.lang.IncompatibleClassChangeError: The method 'void com.google.android.gms.common.api.GoogleApiClient.connect()' was expected to be of type interface but instead was found to be of type virtual (declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)

लाइन है कि स्टैकट्रेस रिपोर्ट है:

googleApiClient.connect(); 

का प्रयोग खेलने सेवाओं 8.1 किसी

compile 'com.google.android.gms:play-services:8.1.0' 

है यह इस?

+1

आपके द्वारा संकलित की गई जेएआर फ़ाइल आपके द्वारा निष्पादित JAR फ़ाइल के समान संस्करण नहीं है। – EJP

+0

धन्यवाद। मैंने अभी भी एक साफ और पुनर्निर्माण किया था। जार फ़ाइल को अपडेट करने के तरीके को सुनिश्चित करने के बारे में कोई सुझाव? – middlestump

+0

मैंने साफ या पुनर्निर्माण के बारे में कुछ भी नहीं कहा। उनमें से कोई भी संस्करण की समस्या को ठीक नहीं करेगा। मेरे पास पहले जैसा ही सुझाव है। आप कैसे कार्यान्वित करते हैं यह एक और सवाल है। – EJP

उत्तर

17

समस्या को आपके ऐप के पुस्तकालयों में से एक से आता है पर निर्भर करता है, लाइब्रेरी जो Google Play सेवाओं पर भी निर्भर करती है।

वह लाइब्रेरी Google Play Services SDK का पुराना संस्करण उपयोग कर रही है और यह अभी भी इस तथ्य पर निर्भर करती है कि GoogleApiClient क्लास एक इंटरफ़ेस है। This has changed in 8.1.0 where it became an abstract class। यह पुस्तकालयों की पारगमन निर्भरताओं की वजह से पिछड़ा संगतता तोड़ता है।

देखें कि आपके द्वारा उपयोग की जाने वाली लाइब्रेरी में 8.1.0 के साथ एक नया अपडेट किया गया संस्करण भी है, या यदि संभव हो तो उस निर्भरता को हटा दें।

More explanation can be found here

8

Play Services लाइब्रेरी 8.1.0 में यह एक बग। प्ले सेवाओं पुस्तकालय को डाउनग्रेड करके इसे हल किया।

परिवर्तन

compile 'com.google.android.gms:play-services:8.1.0' 

compile 'com.google.android.gms:play-services:7.8.+' 

करने और त्रुटि नहीं रह गया है प्रकट होता है। मेरा दूसरा कोड काम करता है (जैसा कि प्रश्न में उल्लिखित है क्योंकि वे लाइब्रेरी के पुराने संस्करण का उपयोग कर रहे थे) इसे तब तक करना होगा जब तक कि Google अपडेट जारी नहीं करता।

अद्यतन: गैलेक्स द्वारा दूसरे उत्तर से पहले मैंने इसे लिखा था। यह सही उत्तर है। लेकिन यदि आप उन पुस्तकालयों को ढूंढने में असमर्थ हैं जिनके पास इन संस्करणों के संघर्ष हैं, या यदि आप उन लाइब्रेरी निर्भरताओं को नहीं बदल सकते हैं, तो समाधान आपके प्ले संस्करण को 7.8

+1

'compile' com.google.android.gms: play-services: 7.8.0'' काम करता है। यदि आप कर सकते हैं तो + का उपयोग करने से बचने के लिए हमेशा सर्वोत्तम अभ्यास करें। –

+0

मैं इसे स्वयं उपयोग करने जा रहा हूं, लेकिन हम जानते हैं कि यह एक अच्छा दृष्टिकोण नहीं है। हम 7.8 में हमेशा के लिए रहेंगे? – sagits

-1
 compile 'com.google.android.gms:play-services:7.8.+' 
compile 'com.google.android.gms:play-services-maps:7.8.+' 

10+ घंटों के बाद मेरे लिए हल किया गया !!

+0

यदि आपके पास कोई पुराना संस्करण उपयोग करने की आवश्यकता क्यों है, तो यह कोई बेहतर स्पष्टीकरण होगा। –

+0

मेरा तर्क यह था कि मेरे पुस्तकालयों में से एक 8.4 का उपयोग करता था, इसलिए एक और इस्तेमाल किया 7.8 इसलिए + का उपयोग करने के लिए संकेत देता है कि उपयोग के पल में जो भी संस्करण आवश्यक था .... –

संबंधित मुद्दे