2016-05-17 19 views
0

私はアンドロイドスタジオのParse SDKを使用しています。地図ライブラリを追加した後、私のプロジェクトが64Kのメソッド制限を超えたため、私は自分のプロジェクトでmultidexを有効にするまで、すべてうまくいっていました。私は私のアプリを実行すると、私はエラーを以下の取得:sdk "java.lang.NoSuchMethodError"を解析します。 Okhttpライブラリ間の競合

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' 
} 

、これが私のマニフェストファイルです:

<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> 

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) 

これは私のGradleのファイルがどのように見えるかです

これは私のアプリケーションクラスです:

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); 
} 
} 

問題はMyApplicationクラスのParse.initializeステートメントにあると思います。私は私のアプリケーションをデバッグし、そのステートメント(すべてのものはそのステートメントの前に)の初期化ステートメントが実行されるときにブレークポイントを設定すると、私のアプリケーションがクラッシュするため。私はたくさんの検索をしましたが、私はこの問題の解決策を見つけませんでした。助けてください...

EDIT: [OK]を、私はmultiDexEnabledのではなく、それが原因で解析してによって使用されるokhttpライブラリ間の競合であるため、このエラーがないことが判明さらなる研究とGradleの依存関係で遊ん後google-マップサービス。 GoogleマップサービスはOkHttp:2.0.0を使用しています。ParseではOkHttp:2.4.0を使用しています。私はOkHttp:2.0.0はそのような名前のメソッドsetFollowRedirectsを持っていないと思うし、OkHttpをオーバーライドしています:2.4.0 thats私のアプリケーションがクラッシュする理由。私はgoogle-maps-servicesコンパイルステートメントを削除する場合、私のアプリは正常に動作します。

注:私がcompile com.squareup.okhttp:okhttp:2.4.0を実行してもエラーは表示されなくなりましたが、私の解析機能(ログインとサインアップコールバック)はこのエラーcom.parse.ParseException:java.lang.IllegalArgumentException: value == nullを返します。あなたのbuild.gradleファイルに

compile 'com.squareup.okhttp:okhttp:2.4.0' 

を追加

+0

あなたは 'super.onCreate();'の前に 'MultiDex.install(this);'を追加しようとしましたか? – diogojme

+0

それは重要ですか?私はすでに 'attachBaseContext'メソッドにそれを追加しており、' onCreate() 'の前に呼び出されているというログステートメントを使ってチェックしています。 –

+0

私は、同じエラーがまだ試みました。 –

答えて

1

パース時に空の文字列をクライアントキーに渡します。

Parse.initialize(new Parse.Configuration.Builder(this) 
     .applicationId(Const.APP_ID) 
     .server(Const.SERVER_URL) 
     .clientKey("") 
     .build()); 
+0

:Dありがとう、ありがとう!私はこれが正しい答えになるとは思っていませんでした。しかし、私は空の文字列でクライアントキーを初期化することが問題を解決する理由を知らないのですか? –

0

してみてください。

+0

これは 'NoSuchMethodError'を解決しますが、残念ながらこれを行うとsdkが機能しなくなりました。それは 'com.parse.ParseException:java.lang.IllegalArgumentException:value == null'をparse sdkから呼び出すすべてのメソッドに渡します。たとえば、 'ParseUser.logInInBackground'や' ParseUser.signUpInBackground'のように –

+0

編集内容を読んで助けてもらえますか? –

関連する問題