android - ADT18、App Engine 连接的 Android 项目和 noclassdeffounderror

标签 android google-app-engine adt

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

环境:

-新配置的 Eclipse Indigo

-ADT 18

-GWT 2.4

-App Engine SDK 1.6.4

我正在尝试创建一个标准的、简洁的样板文件“App Engine 连接的 Android 项目”,以开始学习 App Engine 和 Android 之间的处理方式。

完成"file">“新建”>“App Engine 连接的 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)

我一整天都在研究这个问题,到目前为止,还没有成功。因此,如果有人有任何建议,我将不胜感激。

谢谢!

编辑 - 5/2/2012 - 从 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();
        }
    });
}

最佳答案

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

关于android - ADT18、App Engine 连接的 Android 项目和 noclassdeffounderror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406957/

相关文章:

android - FragmentPagerAdapter 覆盖 getItem() 方法冲突

android - 我的 onHandleIntent() 没有被调用?

angular - 如何处理 session

python - GAE & lxml : cleaning HTML but not style attribute

android - adt eclipse 包 02-07-2014 更新

java - 有没有办法按需打印堆栈跟踪?

java - spring android Resttemplate编码url

android - 无法从 22.3.0 更新 ADT。到 22.6.1,没有找到更新

python - AppRegistryNotReady : Apps aren't loaded yet. Django

android - 无法解析或不是 SUPPORTED_ABIS、FLAVOR & VERSION_CODES.LOLLIPOP 的字段