2011-12-21 145 views
4

我在eclipse中使用google-api-java-client構建了一個簡單的Android項目。我試圖按照this tutorial來啓動並運行。我已經通過SO搜索瞭解如何將JAR添加到Eclipse中的Android項目。他們大多建議將JAR添加到Android項目中的lib/文件夾中,然後將這些JAR添加到項目的構建路徑中。我已經完成了這兩件事。該項目編譯罰款(無論如何,Eclipse不抱怨任何錯誤)。但是,當我在模擬器中運行Android應用程序時,無論何時嘗試在google-api-java-client JAR中實例化任何類時,都會得到ClassDefNotFoundError。例如在eclipse中將外部jar添加到android項目中

new com.google.api.client.http.apache.ApacheHttpTransport(); 

提高ClassDefNotFoundError

下面是導致該錯誤代碼:

package com.mycom.android; 

import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 

public class SearchRunner implements OnClickListener { 

    private static final String API_KEY = "AIzaSyA1Mg3xWXfoov4HdPUzYY2NwTxuvCev1-E"; 
    private static final String PLACES_SEARCH_URL = ""; 

    @Override 
    public void onClick(View v) { 
     EditText editText = (EditText) v; 
     String searchText = editText.getText().toString(); 
     runSearch(searchText); 
    } 

    protected void runSearch(String searchText) { 
     new com.google.api.client.http.apache.ApacheHttpTransport(); 
    } 

} 

這裏是Eclipse的logcat的一個更完整的輸出:

12-21 15:42:11.402: E/dalvikvm(3412): Could not find class 'com.google.api.client.http.apache.ApacheHttpTransport', referenced from method com.mycom.android.SearchRunner.runSearch 
12-21 15:42:11.402: W/dalvikvm(3412): VFY: unable to resolve new-instance 70 (Lcom/google/api/client/http/apache/ApacheHttpTransport;) in Lcom/mycom/android/SearchRunner; 
12-21 15:42:11.402: D/dalvikvm(3412): VFY: replacing opcode 0x22 at 0x0000 
12-21 15:42:11.402: D/dalvikvm(3412): DexOpt: unable to opt direct call 0x00ca at 0x02 in Lcom/mycom/android/SearchRunner;.runSearch 
12-21 15:42:11.682: I/MapActivity(3412): Handling network change notification:CONNECTED 
12-21 15:42:11.682: E/MapActivity(3412): Couldn't get connection factory client 
12-21 15:42:11.791: D/gralloc_goldfish(3412): Emulator without GPU emulation detected. 
12-21 15:42:12.532: D/dalvikvm(3412): GC_CONCURRENT freed 102K, 3% free 10520K/10823K, paused 5ms+7ms 
12-21 15:42:18.422: D/AndroidRuntime(3412): Shutting down VM 
12-21 15:42:18.422: W/dalvikvm(3412): threadid=1: thread exiting with uncaught exception (group=0x409951f8) 
12-21 15:42:18.482: E/AndroidRuntime(3412): FATAL EXCEPTION: main 
12-21 15:42:18.482: E/AndroidRuntime(3412): java.lang.NoClassDefFoundError: com.google.api.client.http.apache.ApacheHttpTransport 
12-21 15:42:18.482: E/AndroidRuntime(3412):  at com.mycom.android.SearchRunner.runSearch(SearchRunner.java:20) 

回答

5

我按照these instructions的步驟逐步解決了問題。最初開始建立項目:

  1. 我進口從google-api-java-client項目中的JAR文件到我的項目的lib/文件夾
  2. 我右鍵單擊lib/google-api-client...和選擇構建路徑>添加到構建路徑

此時,在Eclipse中,一系列庫出現在我的項目的「參考庫」部分下:

jsr305-1.3.9.jar 
gson-1.7.1.jar 
guava-r09.jar 
junit-4.8.2.jar 
httpclient-4.0.3.jar 
httpcore-4.0.1.jar 
commons-logging-1.1.1.jar 
commons-codec-1.3.jar 
jackson-core-asl-1.9.1.jar 
xpp3-1.1.4c.jar 
protobuf-java-2.2.0.jar 
google-http-client-1.6.0-beta.jar 
google-oauth-client-1.6.0-beta.jar 
google-api-client-1.6.0-beta.jar 

但是,當我去到Project> Properties> Java Build Path> Libraries時,我看到只有google-api-client...被列出。當我嘗試運行該項目時,我得到NoClassDefFounErrorApacheHttpTransport,如原始帖子中所述。這是因爲該類在google-http-client中定義!通過手動將google-http-client添加到構建路徑,問題就解決了。

獲得的經驗:僅僅因爲JAR在Eclipse項目的「引用庫」下列出並不意味着那些JAR包含在項目的構建路徑中。

+0

上面的鏈接證明非常有幫助。謝謝! – nathansizemore 2013-04-30 03:45:50

0

也許進口?按Ctrl + Shift + o做什麼?

如果不是這樣,我不知道你必須初始化善類,這種錯誤

+0

Ctrl + shift + o添加缺少的導入語句。爲了澄清,代碼編譯得很好(沒有缺少導入語句)。 – maxenglander 2011-12-21 20:31:29

+0

如果清理項目,錯誤是否仍然存在? – Travis 2011-12-21 20:41:13

+0

特拉維斯 - 是的。 – maxenglander 2011-12-21 20:43:13

0

是放置在lib文件夾中的jar(S)和項目添加到構建路徑的(屬性部分的項目,Eclipse會自動清理並生成,你應該看到正在使用的jar文件,因爲它會出現在Android庫下的「libraries」部分

要引用請使用import some.package.com,因爲letroll說ctrl + shift + o應該爲你排序進口

相關問題