对不起,如果这是一个简单的问题,但我无法弄清楚我应该做什么,我想我有点超出我的深度。我想将数据从Android应用程序发送到我在Google App Engine上运行的应用程序。从那里数据必须写入数据存储区。我的数据主要是以对象的形式存在,而我正在使用Java。
我遇到了以下问题:how-can-i-connect-a-google-app-engine-application-with-my-android
我想我明白在Android方面会发生什么。我也理解doPost方法是如何工作的以及它应该做什么。但我的问题是,我现在如何使用PersistenceManagerFactory将此数据写入我的数据存储区,或检索它?即,如果我想在那里使用PersistenceManagerFactory,那么doPost中的代码将如何显示?
基本上,我的移动应用程序必须能够像我的AppEngine应用程序w.r.t一样。数据检索/写作。
或者我应该忘记这种方法并做一些不同的事情?
非常感谢任何指向正确方向的指针!
编辑:
我已经开始实施Sam的解决方案,如下所示。然而,某些事情仍然是对的。这是我目前正在做的事情:
在我的GAE-app的web.xml中映射我的servlet:
<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方法失败,并向我提供以下消息:内部服务器错误
这让我相信错误必须在服务器端 - 但我不确定出错的地方或原因。我完全复制了Sam的代码,只更改了“新闻”等必要的内容。
答案 0 :(得分:1)
您应该使用RequestFactorys来解决此问题。
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/
这是一个Andorid应用程序,它通过RequestFactory在C2dm(推送服务)上注册
答案 1 :(得分: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();
}
}
}
Singleton Pmf-Class
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;
}
}
答案 2 :(得分:0)