java.lang.IllegalAccessError:尝试访问com.google.api.client.googleapis.GoogleHeaders.userAgent字段

时间:2012-04-12 00:30:43

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

我正在使用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

帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我自己得到了解决方案。问题在于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使用情况,它可以像刀一样顺利运行。

干杯!