2014-09-13 61 views
0

我正在使用koush/ion庫從URL獲取JSON,問題是當我嘗試運行我的應用程序時它拋出這個嘗試使用koush/ion獲取JSON並獲取DexException

Error:Execution failed for task ':app:dexDebug'. 
com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
/Applications/Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --num-threads=4 --output 
    /Users/Ger/Desktop/Slide/app/build/intermediates/dex/debug 
/Users/Ger/Desktop/Slide/app/build/intermediates/classes/debug 
/Users/Ger/Desktop/Slide/app/build/intermediates/dependency-cache/debug 
/Users/Ger/Desktop/Slide/app/build/intermediates/pre-dexed/debug/androidasync-1.3.8-a258b3b9f5350460cf9a1a47d3844ac30e9c5eba.jar 
/Users/Ger/Desktop/Slide/app/build/intermediates/pre-dexed/debug/gson-2.2-3174cdb2bcc21df781020dd287f6d8f9b30fbcf4.jar 
    /Users/Ger/Desktop/Slide/app/build/intermediates/pre-dexed/debug/gson-2.3-2c927fa37b669aaa0ff9991dd7c990e2d88a7487.jar 
/Users/Ger/Desktop/Slide/app/build/intermediates/pre-dexed/debug/ion-1.3.8-df2772cd07adc55daba28b3d0ce1374cf5a4edd5.jar 
    /Users/Ger/Desktop/Slide/app/build/intermediates/pre-dexed/debug/support-v4-18.0.0-2484d88715cbcdaf306e7f8449d6546e84c1520d.jar 
    Error Code: 
    2 
    Output: 
UNEXPECTED TOP-LEVEL EXCEPTION: 
com.android.dex.DexException: Multiple dex files define Lcom/google/gson/JsonSerializer; 
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) 
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) 
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) 
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) 
    at com.android.dx.command.dexer.Main.run(Main.java:230) 
    at com.android.dx.command.dexer.Main.main(Main.java:199) 
    at com.android.dx.command.Main.main(Main.java:103) 

這是我的代碼:

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

import com.google.gson.Gson; 
import com.google.gson.JsonObject; 
import com.koushikdutta.async.future.FutureCallback; 
import com.koushikdutta.ion.Ion; 

public class NuevosEpisodios extends Activity { 

String resultado = "A"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.temporada); 

    TextView tv = (TextView) findViewById(R.id.descripcion_temp); 
    Ion.with(NuevosEpisodios.this) 
      .load("http://example.com/thing.json") 
      .asJsonObject() 
      .setCallback(new FutureCallback<JsonObject>() { 
       @Override 
       public void onCompleted(Exception e, JsonObject result) { 
        // do stuff with the result or error 
        Gson gson = new Gson(); 
        resultado = gson.toJson(result); 
       } 
      }); 

    tv.setText(resultado); 
} 
} 

我見過很多回答這個問題,但我沒有一個能用的,請給我一個手 我有gson- 2.2和我的lib文件夾中的koush/ion jar,它們都編譯在我的build gradle中:

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:support-v4:18.0.+' 
compile 'com.koushikdutta.ion:ion:1.+' 
compile files('libs/gson-2.2.jar') 
} 

謝謝先進!

回答

2

當我在測試項目中複製dependencies塊時,我不會收到您的錯誤。我想你的libs目錄中有一個額外的jar文件導致了這個問題。這種說法在生成文件:

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

使得自動拿起你把目錄中的所有.jar文件,所以看你是否有在那裏的東西你不需要。無論如何,與通配符包括,這種說法是多餘的:

compile files('libs/gson-2.2.jar') 

此外,而不是下載GSON的罐子和手動把它變成你的libs目錄,你可以把它自動下載並管理它和你一樣爲com.koushikdutta.ion:ion依賴做到:

compile 'com.google.code.gson:gson:2.2' 

有此庫比2.2的新版本;你可能要考慮升級。 http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.google.code.gson%22%20AND%20a%3A%22gson%22

+0

你好,我不知道該怎麼做,所以我使用了一個asynctask類,但感謝提問 – user3739503 2014-09-14 19:46:47