【问题标题】:java.lang.IllegalAccessError: tried to access field com.google.api.client.googleapis.GoogleHeaders.userAgentjava.lang.IllegalAccessError:试图访问字段 com.google.api.client.googleapis.GoogleHeaders.userAgent
【发布时间】:2012-04-12 00:30:42
【问题描述】:

我正在使用 Android 2.3.3 和 Google API 来开发地图应用程序。

问题出在以下代码中:

GoogleHeaders headers = new GoogleHeaders();
headers.setApplicationName("My Sample Google App on Maps");
request.setHeaders(headers);

拍摄时出现以下错误,

E/AndroidRuntime(382): FATAL EXCEPTION: main
E/AndroidRuntime(382): java.lang.IllegalAccessError: tried to access field com.google.api.client.googleapis.GoogleHeaders.userAgent from class com.google.api.client.googleapis.GoogleHeaders
E/AndroidRuntime(382):  at com.google.api.client.googleapis.GoogleHeaders.setApplicationName(GoogleHeaders.java:129)
E/AndroidRuntime(382):  at com.example.main.MapActivity$2.initialize(MapCallActivity.java:292)
E/AndroidRuntime(382):  at com.google.api.client.http.HttpRequestFactory.buildRequest(HttpRequestFactory.java:91)
E/AndroidRuntime(382):  at com.google.api.client.http.HttpRequestFactory.buildGetRequest(HttpRequestFactory.java:120)
E/AndroidRuntime(382):  at com.example.main.MapActivity.MyMethod(MapCallActivity.java:248)
E/AndroidRuntime(382):  at com.example.main.MapActivity.myMethod2(MapCallActivity.java:172)
E/AndroidRuntime(382):  at com.example.main.MapActivity.onCreate(MapCallActivity.java:108)
E/AndroidRuntime(382):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(382):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
E/AndroidRuntime(382):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
E/AndroidRuntime(382):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime(382):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/AndroidRuntime(382):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(382):  at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(382):  at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime(382):  at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(382):  at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(382):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(382):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(382):  at dalvik.system.NativeStart.main(Native Method)

请解释一下,因为我被卡住了,无法超越这一点。

使用的 API:

google-api-client-googleapis-1.4.1-beta.jar
google-http-client-1.8.3-beta.jar
google-http-client-android2-1.8.3-beta.jar
google-oauth-client-1.8.0-beta.jar

我们将不胜感激!

【问题讨论】:

    标签: java android eclipse google-api-java-client


    【解决方案1】:

    检查您是否设置了适当的权限。编译器认为您无权访问您尝试修改的对象。 http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalAccessError.html

    【讨论】:

    • 谢谢!我检查了它。你能帮我详细介绍一下这些东西吗?
    • 我在发布之前检查了它。无法找出罪魁祸首。
    【解决方案2】:

    我自己找到了解决方案。问题在于 Googleapis-1.4.1-beta.jar 导入,这是编译器由于内部访问限制而无法更改数据的罪魁祸首。它在 GoogleHeaders.java 中产生了问题。

    它通过编译器需要访问的 setApplicationName 方法设置 userAgent 变量。但是,现在修改如下。

    以下是 GoogleHeaders 的新代码。希望对所有此类用户有所帮助。

    HttpHeaders headers = new HttpHeaders();
    headers.setUserAgent("Searching Places..");
    request.setHeaders(headers);
    
    request.addParser(new JsonHttpParser(new JacksonFactory()));
    

    完全删除GoogleHeaders的使用,它会像刀一样流畅地运行。

    干杯!

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2016-05-31
      • 2020-12-30
      • 1970-01-01
      • 2022-12-22
      • 2014-07-20
      相关资源
      最近更新 更多