Ich arbeite mit Parse SDK in Android Studio. Alles funktionierte gut, bis ich multidex in meinem Projekt aktiviert hatte, weil nach dem Hinzufügen der Kartenbibliotheken mein Projekt die 64K-Methodengrenze überschritt. Ich erhalte folgende Fehlermeldung, wenn ich meine app laufen:Parse sdk "java.lang.NoSuchMethodError". Konflikt zwischen Okhttp Bibliotheken
java.lang.NoSuchMethodError: com.squareup.okhttp.OkHttpClient.setFollowRedirects
at com.parse.ParseOkHttpClient.<init>(ParseOkHttpClient.java:58)
at com.parse.ParseHttpClient.createClient(ParseHttpClient.java:45)
at com.parse.ParsePlugins$Android.newHttpClient(ParsePlugins.java:175)
at com.parse.ParsePlugins.restClient(ParsePlugins.java:91)
at com.parse.Parse.getEventuallyQueue(Parse.java:615)
at com.parse.Parse.access$800(Parse.java:42)
at com.parse.Parse$1.call(Parse.java:410)
at com.parse.Parse$1.call(Parse.java:407)
at bolts.Task$4.run(Task.java:357)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
Dies ist, wie meine gradle Datei wie folgt aussieht:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
dexOptions {
javaMaxHeapSize "4g"
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.github.clans:fab:1.6.2'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.google.maps:google-maps-services:0.1.9'
compile 'com.google.maps.android:android-maps-utils:0.4'
compile 'com.balysv:material-ripple:1.0.2'
compile 'com.android.support:cardview-v7:23.3.0'
compile 'com.android.support:recyclerview-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:multidex:1.0.1'
compile('com.github.afollestad.material-dialogs:core:[email protected]') {
transitive = true
}
compile 'com.parse.bolts:bolts-android:1.4.0'
compile 'com.parse:parse-android:1.13.0'
}
und das ist mein Manifest-Datei:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rowburst.traverous.traverous">
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name="com.example.MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/MAPS_API_KEY" />
<activity
android:name="com.example.LaunchingActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.LoginActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" />
<activity android:name="com.example.MainActivity"></activity>
</application>
Und das ist meine Anwendungsklasse:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId(Const.APP_ID)
.server(Const.SERVER_URL)
.build());
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Ich denke, das Problem ist in Parse.initialize
Anweisung in MyApplication-Klasse. Weil, wenn ich meine App debugge und einen Haltepunkt auf dieser Aussage einstelle (alles scheint vor dieser Aussage in Ordnung), wenn die Initialisierungsanweisung ausgeführt wird, stürzt meine APP ab. Ich habe viel gesucht und ich habe keine Lösung für dieses Problem gefunden. Bitte helfen ...
EDIT: Ok nach weiterer Forschung und dem Spiel mit gradle Abhängigkeiten habe ich herausgefunden, dass dieser Fehler nicht wegen multiDexEnabled ist es eher wegen des Konflikts zwischen okhttp Bibliothek von Parse verwendet wird, und Google- Karten-Dienste. Google-maps-services verwenden OkHttp: 2.0.0, wobei ich als Parse vermutlich OkHttp: 2.4.0 verwende. Ich denke, OKHttp: 2.0.0 hat keine solche Methode des Namens setFollowRedirects
und es überschreibt OkHttp: 2.4.0 das ist, warum meine App abstürzt. Wenn ich die Kompilierungsanweisung google-maps-services lösche, funktioniert meine App gut.
Hinweis: Wenn ich tun compile com.squareup.okhttp:okhttp:2.4.0
der Fehler nicht mehr kommt, aber meine Parse-Funktionen (d. H. Anmeldung und Anmeldung Rückruf) geben diesen Fehler com.parse.ParseException:java.lang.IllegalArgumentException: value == null
, sie funktionieren nicht mehr.
Haben Sie versucht, 'MultiDex.install (this);' before 'super.onCreate();'? – diogojme
spielt das eine Rolle? Weil ich es bereits in der 'attachBaseContext' Methode hinzugefügt habe, und ich habe mit der Log-Anweisung überprüft, dass es vor' onCreate() 'aufgerufen wird. –
Ich habe versucht, immer noch der gleiche Fehler. –