1

我编写了这段代码,它将从应用引擎数据存储中的实体“ContactInfo”中提取所有内容并将其放入字符串中。

我的问题是如何在 android 端点中进行特定查询。例如,我只想显示实体中具有特定名称或邮政编码的项目。这是我必须将整个实体放入字符串中的内容。

package com.indeeditis;

import java.io.IOException;



import java.util.Date;

import org.json.JSONException;

import android.os.AsyncTask;
import android.content.Context;
import android.content.Intent;

import com.indeeditis.MainActivity.EndpointsTask;
import com.indeeditis.contactinfoendpoint.Contactinfoendpoint;
import com.indeeditis.contactinfoendpoint.model.CollectionResponseContactInfo;
import com.indeeditis.contactinfoendpoint.model.ContactInfo;

import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.json.jackson.JacksonFactory;


import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.app.Activity;
import android.view.View.OnClickListener;


public class FinderActivity extends Activity  implements OnClickListener {





@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.finder);

    Button start = (Button)findViewById(R.id.button9000);
    start.setOnClickListener(this);


}



public class EndpointsTask extends AsyncTask<Context, Integer, Long> {




    protected Long doInBackground(Context... contexts) {

      Contactinfoendpoint.Builder endpointBuilder = new Contactinfoendpoint.Builder(
          AndroidHttp.newCompatibleTransport(),
          new JacksonFactory(),
          new HttpRequestInitializer() {
          public void initialize(HttpRequest httpRequest) { }
          });
  Contactinfoendpoint endpoint = CloudEndpointUtils.updateBuilder(
  endpointBuilder).build();





  try {

     String apples = endpoint.listContactInfo().execute().toString();



        Log.w("myApp", apples);



  } catch (IOException e) {
    e.printStackTrace();
  }
      return (long) 0;
    }




    }



@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

    new EndpointsTask().execute(getApplicationContext());

}





}
4

1 回答 1

1

要在通过云端点从 android 发送查询请求时应用过滤器,您需要添加选项来设置参数。我将用一个简短的例子来解释

1,假设您的contactinfo端点有2个属性

name = ndb.StringProperty()
contacttype = ndb.StringProperty() // assume this can have values personal or business

2,现在如果您需要查询特定的contacttype,那么您的应用引擎代码应该有一个基于属性contacttype 进行过滤的查询方法。您的端点应通过传递来自用户的输入参数来调用此查询方法。

3,现在要从 android 发送所需的参数,Listcontactinfo您将在其中定义 REST 路径和方法类型的类应该包含设置 contacttype 参数的选项

@com.google.api.client.util.Key
private String contacttype;


public String getContacttype() {
    return contacttype;
  }

  public Listcontactinfo setContacttype(String contacttype) {
    this.contacttype = contacttype;
    return this;
  }

4,最后,当从你的android代码调用端点方法时,你应该使用setContacttype传递一个值,这将是这样的:

String apples = endpoint.listContactInfo().setContacttype("personal").execute().toString();

这是一个示例情况,您希望查询具有值为“个人”的联系人类型的实体

于 2013-09-02T11:29:21.320 回答