2

これが単純な質問である場合は申し訳ありませんが、私は自分が何をすべきか理解できず、ここでは少し深みがないと思います。AndroidアプリケーションからGoogleAppEngineで実行されているアプリケーションにデータを送信したい。そこから、データをデータストアに書き込む必要があります。私のデータは主にオブジェクトの形式であり、Javaで作業しています。

私は次の質問に出くわしました:how-can-i-connect-a-google-app-engine-application-with-my-android

私はAndroid側で何が起こらなければならないかを理解していると思います。また、doPostメソッドがどのように機能し、何をするのかについても理解しています。しかし、私の問題はこれです。PersistenceManagerFactoryを使用して、このデータをデータストアに書き込んだり、取得したりするにはどうすればよいですか?つまり、そこでPersistenceManagerFactoryを使用したい場合、doPost内のコードはどのように見えますか?

基本的に、私のモバイルアプリケーションは、データの取得/書き込みに関して、AppEngineアプリケーションと同じように実行できる必要があります。

それとも、この方法を忘れて、何か別のことをする必要がありますか?

正しい方向へのポインタは大歓迎です!

編集:

以下に示すように、Samのソリューションの実装を開始しました。しかし、それでも何かが正しくありません。これが私が現在行っていることです:

GAEアプリのweb.xmlでサーブレットをマッピングします。

<servlet>
    <servlet-name>this_servlet</servlet-name>
<servlet-class>*app-details*.server.JsonNews</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>this_servlet</servlet-name>
    <url-pattern>/my_app/my_app_place</url-pattern>
</servlet-mapping>

doPost()メソッドの実装は、Samの実装と同じです。

私のAndroidアプリでは:

DefaultHttpClient hc=new DefaultHttpClient();
ResponseHandler <String> res=new BasicResponseHandler();
HttpPost postMethod=new HttpPost("http://my_application.appspot.com/my_app/my_app_place");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
nameValuePairs.add(new BasicNameValuePair("value1", "Value my user entered"));  
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));  
String response=hc.execute(postMethod,res);

ただし、hc.executeメソッドは失敗し、次のメッセージが表示されます。内部サーバーエラー

これにより、エラーはサーバー側にあるはずだと思いますが、どこで、なぜ問題が発生しているのかわかりません。サムのコードを正確にコピーし、「ニュース」などの必要なものだけを変更しました。

4

3 に答える 3

1

この問題を解決するには、RequestFactoryを使用する必要があります。

https://developers.google.com/web-toolkit/doc/latest/DevGuideRequestFactory

RequestFactoryを使用すると、クライアント(andoridまたはgwt-client)でプロキシオブジェクトを使用して、サーバーに送り返すことができます。

この例を確認してください: http ://code.google.com/p/cloud-tasks-io/source/browse/trunk/CloudTasks-AppEngine/

これは、C2dm(プッシュサービス)のRequestFactoryを介して登録するAndoridアプリです。

于 2012-05-07T11:02:41.883 に答える
1

単純なHttpServletを作成することもできます。次の例では、データストア内のすべてのニュースアイテムのJSON文字列を返します。

public class JsonNews extends HttpServlet {

@Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

        PrintWriter out = resp.getWriter();
        resp.setContentType("application/json");

        //out.write("{news}");

        PersistenceManager pm = Pmf.getPersistenceManager();
        Query q = pm.newQuery(News.class);

        List<News> news = null;
        String retStr="";
        try {
            news = (List<News>) q.execute();
            Gson g = new Gson();
            //retStr = g.toJson(news);
            retStr = "{\"success\": true, \"news\": " + new Gson().toJson(news,new TypeToken<List<News>>() {}.getType()) + '}';

             out.write( retStr);
        } catch (JDOException e) {
            e.printStackTrace();

        } finally {
            q.closeAll();
            pm.close();

        }

  }
}

シングルトンPmfクラス

public final class Pmf  {
private static final PersistenceManagerFactory pmfInstance =
    JDOHelper.getPersistenceManagerFactory("transactions-optional");

private Pmf() {}


public static PersistenceManager getPersistenceManager() {

    PersistenceManager pm = pmfInstance.getPersistenceManager();

    return pm;


}



}
于 2012-05-07T17:19:22.117 に答える
0

この質問は私の正確な問題を解決します:

How-to-send-a-json-object-over-request-with-android

dmazzoniとprimpopの回答を参照してください。

于 2012-05-10T10:32:38.093 に答える