使用AutoCompleteTextView和AsyncTask 检索城市
功能:一个AutoCompleteTextView 输入一个城市名的第一个字时
自动检索所有城市第一个有相同的字
//记得配置联网权限
1、在布局界面布局 activity_main.xml
代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<!-- 只检索一个字 completionThreshold="1"-->
<AutoCompleteTextView
android:id="@+id/autocompletetextview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要查找的城市"
android:completionThreshold="1" />
</RelativeLayout>
-------------------------
2、MainActivity 类
代码
public class MainActivity extends Activity {
private AutoCompleteTextView auto;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.auto = (AutoCompleteTextView) this.findViewById(R.id.autocompletetextview);
//需要有该文件
String url = "http://192.168.10.50:8080/xml/citys_weather.xml";
new MyAsyncTask().execute(url);
}
class MyAsyncTask extends AsyncTask<String, Void, byte[]>{
@Override
protected byte[] doInBackground(String... params) {
String url = params[0];
HttpGet get = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
try {
HttpResponse response = client.execute(get);
if(response.getStatusLine().getStatusCode() == 200){
return EntityUtils.toByteArray(response.getEntity());
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] result) {
super.onPostExecute(result);
if(result != null){
//Xml.newPullParser -- 解析器
XmlPullParser parser = Xml.newPullParser();
ByteArrayInputStream bis = new ByteArrayInputStream(result);
try {
parser.setInput(bis, "utf-8");
List<String> list = city_list(parser);
adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,list);
auto.setAdapter(adapter);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Toast.makeText(MainActivity.this, "网络异常", Toast.LENGTH_SHORT).show();
}
}
private List<String> city_list(XmlPullParser parser) {
List<String> list = new ArrayList<String>();
try {
int event = parser.getEventType();
while(event != XmlPullParser.END_DOCUMENT){
switch(event){
case XmlPullParser.START_TAG:
if("d".equals(parser.getName())){
list.add(parser.nextText());
}
}
event = parser.next();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
}