无法在Google App引擎端点中使用插入方法

时间:2015-05-19 20:43:32

标签: java android google-app-engine android-asynctask google-cloud-endpoints

我正在构建一个访问服务器的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();
}

Screenshot of my project tree

我现在需要的是如何使用我将数据发送到服务器的方式。我知道我可以连接到服务器,我测试过。

这是我尝试构建时收到的错误消息。

    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(我怀疑,这项工作是由自动生成的类完成的,因为它在构建器中显示)

2 个答案:

答案 0 :(得分:1)

可能是你正在使用两种不同的&#34;优惠&#34;对象 app.model.Offerbackend.model.offerApi.model.Offer

类型backend.model.offerApi.model.Offer似乎是为您的Endpoints API生成的类型,您需要在客户端(android)端的任何位置使用该类型。

答案 1 :(得分:0)

我相信你应该创建一个单独的项目,其中包含android app和你的api之间共享的所有类。