我正在构建一个访问服务器的Android应用程序。我正在使用完整的谷歌解决方案。后端是GAE,我使用端点来公开我的API,我也使用GCM。我使用android studio提供的自动生成工具来获取我的课程。
在我的app模块中,我有一个名为offer的类,这是我将数据发送到服务器的地方,我还有一个允许进行api调用的AsyncTask类。
在我的后端模块中,我有暴露的API,我也有一个类提供,API由android studio和app engine sdk生成。
现在我的问题是我尝试了,但它导致失败,就像应用程序和后端中的类不兼容。虽然它们是相同的,但实际上后端中的一个是应用程序中的一个简单副本,区别在于对象"" objectify"我添加的注释。以下是我的代码和我的项目结构的截图。
public class InsertOfferAsyncTask extends AsyncTask <Offer, Void, Boolean>{
private static OfferApi offer_service;
private Context context;
public InsertOfferAsyncTask(Context context) {
this.context = context;
}
protected Boolean doInBackground(Offer... offer) {
if (offer_service == null) {
OfferApi.Builder builder = new OfferApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
.setRootUrl("https://flawless-snow-95011.appspot.com/_ah/api/");
offer_service = builder.build();
}
try {
offer_service.insert(offer[0]); //this where I make the actual API call, I know I shouldn't use Object, it was an attempt to make it work
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
这是我调用AsyncTask的部分,这是上面的代码。
Log.i("offer", offer.getUsr_id());
Log.i("offer_id", String.valueOf(offer.getId()));
Log.i("offer_date", offer.getPost());
new InsertOfferAsyncTask(getActivity().getBaseContext()).execute(offer);
getActivity().finish();
上面的所有代码都来自我的app模块,以下是代码生成的端点代码,我只发布了我调用的部分。
@ApiMethod(
name = "insert",
path = "offer",
httpMethod = ApiMethod.HttpMethod.POST)
public Offer insert(Offer offer) {
ofy().save().entity(offer).now();
logger.info("Created Offer with ID: " + offer.getId());
return ofy().load().entity(offer).now();
}
我现在需要的是如何使用我将数据发送到服务器的方式。我知道我可以连接到服务器,我测试过。
这是我尝试构建时收到的错误消息。
Error:(233, 73) error: no suitable method found for execute(.model.Offer)
method AsyncTask.execute(Runnable) is not applicable
(actual argument .model.Offer cannot be converted to Runnable by method invocation conversion)
method AsyncTask.execute(backend.model.offerApi.model.Offer...) is not applicable
(argument type app.model.Offer does not conform to vararg element type backend.model.offerApi.model.Offer)
任何帮助?我应该使用JSON(我怀疑,这项工作是由自动生成的类完成的,因为它在构建器中显示)
答案 0 :(得分:1)
可能是你正在使用两种不同的&#34;优惠&#34;对象
app.model.Offer
和backend.model.offerApi.model.Offer
?
类型backend.model.offerApi.model.Offer
似乎是为您的Endpoints API生成的类型,您需要在客户端(android)端的任何位置使用该类型。
答案 1 :(得分:0)
我相信你应该创建一个单独的项目,其中包含android app和你的api之间共享的所有类。