在Android的Google App-Engine中使用RPC代理类多次写入(实体)

时间:2012-03-18 06:50:46

标签: google-app-engine cloud rpc gwt-rpc

我正在使用App Engine Connected Android插件支持并自定义Google I / O中显示的示例项目。顺利完成它。我使用代码从Android设备写了一些任务到云成功。

CloudTasksRequestFactory factory = (CloudTasksRequestFactory) Util
                                        .getRequestFactory(CloudTasksActivity.this,
                                                CloudTasksRequestFactory.class);
                                TaskRequest request = factory.taskRequest();

                            TaskProxy task = request.create(TaskProxy.class);
                            task.setName(taskName);
                            task.setNote(taskDetails);
                            task.setDueDate(dueDate);

                            request.updateTask(task).fire();

这很有效,我已经测试过了。

我现在要做的是我有一个数组String[][] addArrayServer,并希望将所有元素写入服务器。我正在使用的方法是:

 
NoteSyncDemoRequestFactory factory = Util.getRequestFactory(activity,NoteSyncDemoRequestFactory.class);
        NoteSyncDemoRequest request = factory.taskRequest();

        TaskProxy task;
        for(int ik=0;ik<addArrayServer.length;ik++) {
            task = request.create(TaskProxy.class);



            Log.d(TAG,"inside uploading task:"+ik+":"+addArrayServer[ik][1]);
            task.setTitle(addArrayServer[ik][1]);
            task.setNote(addArrayServer[ik][2]);
            task.setCreatedDate(addArrayServer[ik][3]);


            // made one task

            request.updateTask(task).fire();
        }

确保上传一个任务,即数组的第一个元素。但是在创建一个新的任务实例时会挂起。我是Google-Appengine的新手。什么是正确的方式来调用RPC,真的快速上传多个实体?

感谢。

1 个答案:

答案 0 :(得分:0)

这个问题的答案是,request.fire()只能为一个请求对象调用一次,但我每次都在循环中调用它。所以它只会更新一次。简单的解决方案是在循环外调用fire()。

NoteSyncDemoRequestFactory factory = Util.getRequestFactory(activity,NoteSyncDemoRequestFactory.class);         NoteSyncDemoRequest request = factory.taskRequest();

    TaskProxy task;
    for(int ik=0;ik<addArrayServer.length;ik++) {
        task = request.create(TaskProxy.class);



        Log.d(TAG,"inside uploading task:"+ik+":"+addArrayServer[ik][1]);
        task.setTitle(addArrayServer[ik][1]);
        task.setNote(addArrayServer[ik][2]);
        task.setCreatedDate(addArrayServer[ik][3]);


        // made one task

        request.updateTask(task);
    }
request.fire(); //call fire only once after all the actions are done...

有关详细信息,请查看此问题.. GWT RequestFactory and multiple requests