2

免责声明...我我已经浏览了关于这个主题的所有相关帖子,到目前为止,没有一个能解决我的问题。话虽如此,如果我错过了什么,请随时指出正确的方向。

环境:

- 新配置的 Eclipse Indigo

-ADT 18

-GWT 2.4

-App 引擎 SDK 1.6.4

我正在尝试创建一个标准的、简洁的样板“App Engine Connected Android Project”,以开始了解 App Engine 和 Android 之间的处理方式。

完成 File > New > App Engine Connected Android 项目(使用功能性 C2DM 角色电子邮件和密码)后,我在 Eclipse 中获得了 MyTasks-Android 和 MyTasks-AppEngine 项目。

了解 ADT17+ 的整个 lib 与 libs 问题后,我将 MyTasks-Android 项目中的 lib 文件夹更改为 libs 并更新三个 jar 的构建路径(c2dm.jar、requestfactory-client.jar 和 validation-api-1.0.0 .GA.jar)。我还将 MyTasks-AppEngine 项目添加到构建路径中。

完成后,我尝试在我的设备上运行 App-Android 项目。

我可以选择我的 Android 帐户,“允许”它访问我的帐户,然后我看到“问好”按钮。单击按钮后,我在 Eclipse 中收到以下错误:

05-01 22:13:22.965: E/dalvikvm(17457): Could not find class 'com.mytasks.client.MyRequestFactory', referenced from method com.mytasks.MyTasksActivity$2$1.doInBackground
05-01 22:13:22.965: W/dalvikvm(17457): VFY: unable to resolve const-class 315 (Lcom/mytasks/client/MyRequestFactory;) in Lcom/mytasks/MyTasksActivity$2$1;
05-01 22:13:22.965: D/dalvikvm(17457): VFY: replacing opcode 0x1c at 0x000a
05-01 22:13:22.973: W/dalvikvm(17457): threadid=11: thread exiting with uncaught exception (group=0x40a291f8)
05-01 22:13:22.989: E/AndroidRuntime(17457): FATAL EXCEPTION: AsyncTask #1
05-01 22:13:22.989: E/AndroidRuntime(17457): java.lang.RuntimeException: An error occured while executing doInBackground()
05-01 22:13:22.989: E/AndroidRuntime(17457):    at android.os.AsyncTask$3.done(AsyncTask.java:278)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.lang.Thread.run(Thread.java:856)
05-01 22:13:22.989: E/AndroidRuntime(17457): Caused by: java.lang.NoClassDefFoundError: com.mytasks.client.MyRequestFactory
05-01 22:13:22.989: E/AndroidRuntime(17457):    at com.mytasks.MyTasksActivity$2$1.doInBackground(MyTasksActivity.java:145)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at com.mytasks.MyTasksActivity$2$1.doInBackground(MyTasksActivity.java:1)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
05-01 22:13:22.989: E/AndroidRuntime(17457):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

我整天都在做这件事,到目前为止,没有运气。因此,如果有人有任何建议,我绝对会感谢您的帮助。

谢谢!

编辑 - 2012 年 5 月 2 日 - 从 MyTasksActivity 类中添加了 setHelloWorldScreenContent。具体来说,失败:MyRequestFactory requestFactory = Util.getRequestFactory(mContext, MyRequestFactory.class);

同样,这是一个香草向导生成的 App Engine Connected Android 项目 - 我所做的唯一更改是将 MyTasks-AppEngine 添加到 MyTasks-Android 构建路径并将 lib 更改为 libs,然后将三个 jar 读取到构建路径。

private void setHelloWorldScreenContent() {
    setContentView(R.layout.hello_world);

    final TextView helloWorld = (TextView) findViewById(R.id.hello_world);
    final Button sayHelloButton = (Button) findViewById(R.id.say_hello);
    sayHelloButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            sayHelloButton.setEnabled(false);
            helloWorld.setText(R.string.contacting_server);

            // Use an AsyncTask to avoid blocking the UI thread
            new AsyncTask<Void, Void, String>() {
                private String message;

                @Override
                protected String doInBackground(Void... arg0) {
                    MyRequestFactory requestFactory = Util.getRequestFactory(mContext, MyRequestFactory.class);
                    final HelloWorldRequest request = requestFactory.helloWorldRequest();
                    Log.i(TAG, "Sending request to server");
                    request.getMessage().fire(new Receiver<String>() {
                        @Override
                        public void onFailure(ServerFailure error) {
                            message = "Failure: " + error.getMessage();
                        }

                        @Override
                        public void onSuccess(String result) {
                            message = result;
                        }
                    });
                    return message;
                }

                @Override
                protected void onPostExecute(String result) {
                    helloWorld.setText(result);
                    sayHelloButton.setEnabled(true);
                }
            }.execute();
        }
    });
}
4

2 回答 2

4

我遇到了同样的问题。我也只是将文件夹名称从 lib 更改为 libs 并在 andorid 项目的构建路径中添加了 3 个 jar 并且它起作用了。

于 2012-05-03T06:47:31.620 回答
0

我只花了 4 个小时,标准的 lib->libs 对我没有帮助,最后解决方案是用 jdk 1.6 而不是 1.7 编译,这意味着你甚至必须编译来自 appengine 的共享库(逻辑上)用 1.6 编译

于 2012-07-21T12:57:06.583 回答