Android开发----实现ListView+EditView进行搜索的功能
业务功能:
设置一个文本框,输入数据库的信息标题,然后进行查询mysql数据库,以List集合的形式对其进行数据显示,
其中xml布局为:
<LinearLayout 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"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:padding="10dp"
android:background="@drawable/search_background">
<ImageView
android:id="@+id/info_list_flush"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/clear_btn"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/info_list_search"
android:background="@color/white"
android:text="搜索"
android:layout_toLeftOf="@id/info_list_flush"
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:onClick="findinformations"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/info_etn_search"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toLeftOf="@+id/info_list_search"
android:paddingLeft="20dp"
android:background="@drawable/info_et_bg"
android:textColor="@color/white"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<ListView
android:id="@+id/infolist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/divider"
android:dividerHeight="1dp" >
</ListView>
</LinearLayout>
</LinearLayout>
其中渲染ListView的元素xml为
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<ImageView
android:id="@+id/item_info_id"
android:layout_width="110dp"
android:layout_height="60dp"
android:src="@drawable/beanmilk"
android:scaleType="fitXY"/>
<TextView
android:id="@+id/item_info_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/item_info_id"
android:layout_marginTop="1dp"
android:text="牛奶"
android:layout_marginLeft="10dp"
android:textStyle="bold"
android:textSize="20sp"/>
<TextView
android:id="@+id/item_info_area"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/item_info_title"
android:layout_alignBottom="@id/item_info_id"
android:text="植保"/>
<TextView
android:id="@+id/item_info_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="70dp"
android:layout_alignLeft="@id/item_info_area"
android:layout_alignBottom="@id/item_info_id"
android:text="时间"/>
<ImageView
android:id="@+id/item_info_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/expand" />
</RelativeLayout>
对应的Activity的文件
private ImageView info_list_flush;
private ImageView info_list_search;
private EditText info_etn_search = null;//输入搜索框
private ListView infolist;
Infomation information;
private List<Infomation> informations = new ArrayList<Infomation>();
//查询
private List<Infomation> informationlist = new ArrayList<Infomation>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info_list);
//info_etn_search = (EditText)findViewById(R.id.info_etn_search);
}
info_etn_search = (EditText) findViewById(R.id.info_etn_search);
对应的xml点击按钮事件函数
public void findinformations(View view){
final String data = info_etn_search.getText().toString();
new Thread() {
InputStream input = null;//设置输入流
String result = "";
@Override
public void run() {
HttpURLConnection conn;
try {
conn = (HttpURLConnection)new URL("http://你的的服务器IP和项目名/androidaction/androidquerydetail.action?title="+data).openConnection();
conn.setRequestMethod("POST");
conn.setReadTimeout(3000);//设置读取超时的毫秒数
conn.setConnectTimeout(3000);//设置连接超时的毫秒数
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
input = conn.getInputStream();//得到连接输入流
InputStreamReader inputStreamReader = new InputStreamReader(input);
//为得到JSON数据创建BufferedReader
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String inputline = "";
while((inputline = bufferedReader.readLine()) != null) {
result = result + inputline+"\n";
}
//JSON转换为字符串
JSONArray jsoninfoArray = new JSONArray(result);
for(int i= 0;i<jsoninfoArray.length();i++) {
JSONObject jsonObject = (JSONObject) jsoninfoArray.get(i);
Infomation information = new Infomation();
information.setArea(jsonObject.getString("area"));
information.setDate(jsonObject.getString("date"));
information.setTitle(jsonObject.getString("title"));
informationlist.add(information);//加入集合
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
hand.sendEmptyMessage(1);
//System.out.println("数据库拿到的信息"+infoJSON.toString());
}
}.start();
}
其中在主线程执行的Handler类
Handler hand=new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 1)
{
ListView infolist = (ListView) findViewById(R.id.infolist);
SearchAdapter adapter = new SearchAdapter(informationlist, InfoListActivity.this);
infolist.setAdapter(adapter);
//startActivity(new Intent( getApplicationContext(), StuInfoActivity.class ) );
}
else
{
Toast.makeText(getApplicationContext(),"查询错误",Toast.LENGTH_LONG).show();
}
}
};
对应的Adater适配器
package com.example.agriculture_expert_app.adapter;
import java.util.List;
import com.example.agriculture_expert_app.R;
import com.example.agriculture_expert_app.bean.Infomation;
import android.content.Context;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
//搜素按钮Adapter适配器
public class SearchAdapter extends BaseAdapter {
private List<Infomation> informations ;
private Context context;
//配置适配器的构造函数
public SearchAdapter(List<Infomation> informations, Context context) {
super();
this.informations = informations;
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return informations.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.iteminfo_list, parent, false);
}
TextView item_info_title = (TextView)convertView.findViewById(R.id.item_info_title);
item_info_title.setText(informations.get(position).getTitle());
//得到领域
TextView item_info_area = (TextView)convertView.findViewById(R.id.item_info_area);
item_info_area.setText(informations.get(position).getArea());
//得到日期
TextView item_info_date = (TextView)convertView.findViewById(R.id.item_info_date);
item_info_date.setText(informations.get(position).getDate());
//Infomation infor= informations.get(position);
return convertView;
}
}
对应的后端服务器接口
这里使用的是Spring+SpringMVC+Mybatis+MySQL进行设计
//安卓查询数据库资讯
@RequestMapping("androidquerydetail")
@ResponseBody
public void androidquerydetail(HttpServletResponse response,HttpServletRequest request) throws IOException{
response.setCharacterEncoding("utf-8");
String title = request.getParameter("title");
System.out.println("andoroid拿到的title"+title);
List<Information> infoLists = this.informationService.queryInfoByTitle(title);
response.setContentType("application/x-json");
PrintWriter out = response.getWriter();
JSONArray jsonArray = JSONArray.fromObject(infoLists);//设置存放数据
System.out.print(jsonArray.toString());
out.print(jsonArray);
//清除缓存
out.flush();
//关闭
out.close();
}
加上查询数据库进行返回输出流进行设计实现