0

データをデータストアに保存しようとして、GAE でホストされる RESTful サービスを実装しています。

@Path("/db")
public class DBAccess {

    private static final Logger log = Logger.getLogger(DBAccess.class.getName());

    // Allows to insert contextual objects into the class,
    // e.g. ServletContext, Request, Response, UriInfo
    @Context
    UriInfo uriInfo;
    @Context
    Request request;

    @POST
    @Produces(MediaType.TEXT_HTML)
    @Consumes(MediaType.APPLICATION_JSON)
    public void saveDataBase(final List<User> data,
            @Context HttpServletResponse servletResponse,
            @Context HttpServletRequest servletRequest) throws IOException {

        log.info("saveDatabae REST Service has been called.");

        Key dbKey = KeyFactory.createKey("DataBase", "default");

        Entity user;
        DatastoreService datastore = DatastoreServiceFactory
                .getDatastoreService();

        for (int i = 0; i < data.size(); i++) {
            user = new Entity("User", dbKey);
            user.setProperty("idUser", data.get(i).getIdUser());
            user.setProperty("idGMC", data.get(i).getIdGMC());

            datastore.put(user);
        }

        servletResponse.sendRedirect("../index.jsp");
    }
}

一方、私はそれを消費しようとしているAndroidアプリを持っています

private static void post(String endpoint, Map<String, String> params)
            throws IOException, JSONException {

        Iterator<Entry<String, String>> iterator = params.entrySet().iterator();

        Log.v(TAG, "Posting params to " + endpoint);

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost post = new HttpPost(endpoint);

        post.setHeader("content-type", "application/json");

        // Build JSON
        JSONObject dato = new JSONObject();

        while (iterator.hasNext()) {
            Entry<String, String> param = iterator.next();
            dato.put(param.getKey(), param.getValue());
        }

        StringEntity entity = new StringEntity(dato.toString());
        post.setEntity(entity);

        HttpResponse resp = httpClient.execute(post);
        String respStr = EntityUtils.toString(resp.getEntity());

        Log.v(TAG, "HttpResponse is " + respStr);

    }

によって呼び出されます

Map<String, String> params = new HashMap<String, String>();
params.put("regId", regId);
post("http://pickapp-server.appspot.com/rest/db", params);

GAE 管理コンソールで、次のログ エントリを取得します。

ここに画像の説明を入力

ポイントは、ユーザー エンティティが GAE データストアに作成されることは決してないということです。REST サービスが呼び出されていないと思います。何が欠けているのか誰か教えてもらえますか?

4

1 に答える 1

1

あなたの REST メソッドは JSON オブジェクトの配列を期待しているようですが、Android POST は 1 つの JSON オブジェクトを提供します。で包んでみてくださいJSONArray

于 2013-01-04T19:55:42.040 に答える