转自:http://blog.csdn.net/wozaifeiyang0/article/details/7331450

QueryTask

查询功能在GIS中是一个不可或缺的重要功能,示例中提供了一个属性查询的Demo,下面来看一下在Android中我们怎样实现一个查询功能,

1、 我们在布局文件中添加了一个按钮,并且在代码中添加了这个按钮的点击事件监听;

2、 自定义一个 AsyncTask的扩展类,在此类中我们实现了查询功能。

3、 在按钮的事件监听类中执行我们自定义的异步类。

相关代码如下:

querybt.setOnClickListener(newView.OnClickListener() {

public voidonClick(View v) {

if(blQuery) {

String targetLayer = targetServerURL.concat("/3");

String[] queryParams = { targetLayer, "AVGHHSZ_CY>3.5" };

AsyncQueryTask ayncQuery =newAsyncQueryTask();

ayncQuery.execute(queryParams);

}else{

gl.removeAll();

blQuery =true;

querybt.setText("Average Household > 3.5");

}

}

});

上面代码中定义了一个按钮的点击事件监听,并在监听中执行我们自定义的异步类,异步类中实现了查询功能,下面我们来看一下这个类都做了什么,代码如下:

private classAsyncQueryTaskextendsAsyncTask<String, Void, FeatureSet> {

protected voidonPreExecute() {

//在未查询出结果时显示一个进度条

progress = ProgressDialog.show(AttributeQuery.this, "",

"Please wait....query task is executing");

}

protectedFeatureSet doInBackground(String... queryParams) {

if(queryParams ==null|| queryParams.length <= 1)

return null;

//查询条件和URL参数

String url = queryParams[0];

//查询所需的参数类

Query query =newQuery();

String whereClause = queryParams[1];

SpatialReference sr = SpatialReference.create(102100);

query.setGeometry(newEnvelope(-20147112.9593773, 557305.257274575,

-6569564.7196889, 11753184.6153385));//设置查询空间范围

query.setOutSpatialReference(sr);//设置查询输出的坐标系

query.setReturnGeometry(true);//是否返回空间信息

query.setWhere(whereClause);//where条件

QueryTask qTask =newQueryTask(url);//查询任务类

FeatureSet fs =null;

try{

fs = qTask.execute(query);//执行查询,返回查询结果

}catch(Exception e) {

//TODOAuto-generated catch block

e.printStackTrace();

returnfs;

}

returnfs;

}

protected voidonPostExecute(FeatureSet result) {

String message = "No result comes back";

if(result !=null) {

Graphic[] grs = result.getGraphics();

if(grs.length > 0) {

gl.addGraphics(grs); //将查询结果添加到图层上

message = (grs.length == 1 ? "1 result has " : Integer

.toString(grs.length) + " results have ")

+ "come back";

}

}

progress.dismiss();//停止进度条

Toast toast = Toast.makeText(AttributeQuery.this, message,

Toast.LENGTH_LONG);

toast.show();

querybt.setText("Clear graphics");

blQuery =false;

}

}

通过注释和代码可以看出,要做一个查询其实一点都不麻烦,只需要配置好两个类:Query和QueryTask。Query是要查询的因子,QureyTask是查询任务的执行者,我们只需给Query设定好要查询的相关参数,并给QureyTask指定查询的URL路径,查询功能就可以顺利完成。

更多相关文章

  1. android studio如何合并和读取多个相同功能但是文本不同的按钮
  2. Android开发带图标的按钮
  3. repo sync同步Android 源代码下载到99%出错
  4. Android canvas.drawXXX参数问题
  5. android添加文件打开方式以及参数传递
  6. 【Android Studio快捷键】之代码提示
  7. Android的strings.xml不在代码显示转html原生就支持的部分html语
  8. android使用Navigation实现Fragment之间的跳转之二:参数传递

随机推荐

  1. 不吹不黑,jupyter lab 3.0客观使用体验
  2. 利用Python将PDF文档转为MP3音频
  3. centos 7 修改主机名
  4. centos临时ip和永久ip的配置
  5. Android的HTTP基础与之使用HttpClient和H
  6. Python+Dash快速web应用开发——基础概念
  7. 地图可视化神器kepler.gl近期重要更新
  8. Android(安卓)样式之shape入门使用
  9. 12个令人惊奇的CSS实验项目 [每日前端夜
  10. 使用Python验证常见的50个正则表达式