0

我有一个成功使用 RequestFactory 来操作 AppEngine Datastore 中的实体的 Android 应用程序。

在我的 AppEngine 服务中,我想使用

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

获取有关当前 Android 用户的信息,但 getCurrentUser() 返回 null。

我的 Android 应用程序如何让 RequestFactory 知道谁登录了?

这个问题适用于开发模式和生产模式。

谢谢。

4

1 回答 1

0

在旧的 AppEngine Connected Android Eclipse 向导代码中找到了一个不太明显的答案,该代码在 GPE 中不再可用(请参阅此向导生成代码的 Util.java)。它包括以下内容:

T requestFactory = RequestFactorySource.create(factoryClass);
requestFactory.initialize(new SimpleEventBus(),
            new AndroidRequestTransport(uri, authCookie));

public AndroidRequestTransport(URI uri, String cookie) {
        this.uri = uri;
        this.cookie = cookie;
    }

    public void send(String payload, TransportReceiver receiver) {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost();
        post.setHeader("Content-Type", "application/json;charset=UTF-8");
        post.setHeader("Cookie", cookie);

        post.setURI(uri);
        Throwable ex;
        try {
            post.setEntity(new StringEntity(payload, "UTF-8"));
            HttpResponse response = client.execute(post);
            if (200 == response.getStatusLine().getStatusCode()) {
                String contents = readStreamAsString(response.getEntity().getContent());
                receiver.onTransportSuccess(contents);
            } else {
                receiver.onTransportFailure(new ServerFailure(response.getStatusLine()
                        .getReasonPhrase()));
            }
            return;
        } catch (UnsupportedEncodingException e) {
            ex = e;
        } catch (ClientProtocolException e) {
            ex = e;
        } catch (IOException e) {
            ex = e;
        }
        receiver.onTransportFailure(new ServerFailure(ex.getMessage()));
    }

使用 GPE 向导中的代码对我有用。

于 2013-01-06T04:01:51.007 回答