很长时间没写了,最近因业务需要,要学习新的东西,android放下了,今天有时间,整理之前的东西,把这个系列最后两篇写完。因为很长时间没写了,有什么问题发信给我。
查看物品种类模块:
1.它对应Servlet的 是 ViewKindServlet.java 类:
返回的JSON 数据类型为:
[{"id":1,"kindDesc":"This is not a mainstream product, but the price is that make your move","items":[],"kindName":"computer hardware"},{"id":2,"kindDesc":"Provide very scarce homes","items":[],"kindName":"house property"},{"id":5,"kindDesc":"we can ues it buy sth","items":[],"kindName":"money"},{"id":6,"kindDesc":"enjoy oneself","items":[],"kindName":"picture"},{"id":7,"kindDesc":"write sth","items":[],"kindName":"paper"}]
2.查看物品种类的布局文件:manage_kind.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg">
<LinearLayout
android:orientation="horizontal"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/sub_title_margin"
>
<LinearLayout
android:orientation="vertical"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView
android:text="@string/manage_kind"
android:textColor="@color/white"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/bnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/add_kind"
/>
</LinearLayout>
<Button
android:id="@+id/bn_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/label_font_size"
android:background="@drawable/home"
/>
</LinearLayout>
<!-- 显示种类列表的ListView -->
<ListView
android:id="@+id/kindList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
3.显示物品种类的Activity: ManageKind.java
package com.infy.auction.client;
import org.json.JSONArray;
import com.infy.auction.client.util.DialogUtil;
import com.infy.auction.client.util.HttpUtil;
import com.infy.auction.client.util.KindArrayAdapter;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
public class ManageKind extends Activity{
private static final String TAG="ManageKind";
Button bnHome;
Button bnAdd;
ListView kindList;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i(TAG, "befor-->");
setContentView(R.layout.manage_kind);
Log.i(TAG, "after");
//获取界面上布局上的两个按钮
bnHome =(Button)findViewById(R.id.bn_home);
bnAdd =(Button)findViewById(R.id.bnAdd);
kindList = (ListView)findViewById(R.id.kindList);
//为按钮添加单击监听事件
bnHome.setOnClickListener(new FinishListener(this));
bnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//启动AddKind Activity
Log.i(TAG, "add->添加类");
Intent intent = new Intent(ManageKind.this,AddKind.class);
startActivity(intent);
}
});
String action = getIntent().getStringExtra("action");
//定义发送请求的URL
String url = HttpUtil.BASE_URL +action;
try{
//向指定的URL发送请求,并把相应包装成JSONArray对象
final JSONArray jsonArray = new JSONArray(HttpUtil.getRequest(url));
//把JSONArray对象包装成Adapter
kindList.setAdapter(new KindArrayAdapter(jsonArray, ManageKind.this));
}catch(Exception e){
DialogUtil.showDialog(this, "服务器异常,请稍后再试!", false);
e.printStackTrace();
}
}
}
4.这里用到了一个把JSONArray对象,使用LsitView显示物品种类的代码:KindArrayAdapter提供的列表项既包括种类名,也包括种类描述:KindArrayAdapter.java
package com.infy.auction.client.util;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.infy.auction.client.R;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class KindArrayAdapter extends BaseAdapter{
//需要包装的JSONArray
private JSONArray kindJsonArray;
private Context ctx;
public KindArrayAdapter(JSONArray kindJsonArray,Context ctx) {
this.kindJsonArray = kindJsonArray;
this.ctx = ctx;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
//返回ListView中包含的列表的数量
return kindJsonArray.length();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
//获取指定的列表包装的JSONObject
return kindJsonArray.optJSONObject(position);
}
@Override
public long getItemId(int position) {
try{
return ((JSONObject)getItem(position)).getInt("id");
}catch(JSONException e){
e.printStackTrace();
}
return -1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//定义一个线性布局
LinearLayout container = new LinearLayout(ctx);
//设置为水平的线性布局管理器
container.setOrientation(1);
//定义一个线性布局管理器
LinearLayout linear = new LinearLayout(ctx);
//设置为水平的线性布局管理器
linear.setOrientation(0);
//创建一个ImageView
ImageView iv = new ImageView(ctx);
iv.setPadding(10, 0, 20, 0);
iv.setImageResource(R.drawable.item);
//将图片添加到LinearLayout中
linear.addView(iv);
//创建一个TextView
TextView tv= new TextView(ctx);
try{
String kindName = ((JSONObject)getItem(position)).getString("kindName");
//设置TextView所显示的内容
tv.setText(kindName);
}catch(JSONException e){
e.printStackTrace();
}
tv.setTextSize(20);
tv.setTextColor(Color.WHITE);
//将Textviewt添加到LinearLayout中
linear.addView(tv);
container.addView(linear);
//定义一个文本框来显示种类描述
TextView descView = new TextView(ctx);
descView.setPadding(30, 0, 0, 0);
try{
//获取JSONArray数组元素的kindDesc属性
String kindDesc = ((JSONObject)getItem(position)).getString("kindDesc");
descView.setText(kindDesc);
}catch(JSONException e){
e.printStackTrace();
}
descView.setTextSize(16);
container.addView(descView);
return container;
}
}
5.添加种类功能:添加种类对应的ServletAddKindServlet:
6.添加物品种类对应的Activity:
AddKind.java
package com.infy.auction.client;
import java.util.HashMap;
import java.util.Map;
import com.infy.auction.client.util.DialogUtil;
import com.infy.auction.client.util.HttpUtil;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class AddKind extends Activity{
//定义界面上的组件
EditText kindName;
EditText kindDesc;
Button bnAdd;
Button bnCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.add_kind);
//获得界面上组件
kindName = (EditText)findViewById(R.id.kindName);
kindDesc = (EditText)findViewById(R.id.kindDesc);
bnCancel =(Button)findViewById(R.id.bnCancel);
bnAdd = (Button)findViewById(R.id.bnAdd);
bnCancel.setOnClickListener(new FinishListener(AddKind.this));
bnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//输入校验
if(validate()){
//获取用户输入的种类名和描述
String name = kindName.getText().toString().trim();
String desc = kindDesc.getText().toString().trim();
try{
//添加物品种类
String result = addKind(name, desc);
//使用对话框来显示添加结果
DialogUtil.showDialog(AddKind.this, result, true);
}catch(Exception e){
e.printStackTrace();
}
}
}
});
}
//对用户输入进行类名的校验
private boolean validate(){
String name = kindName.getText().toString().trim();
if(name.equals("")){
DialogUtil.showDialog(this, "种类名称是必填项!",false);
return false;
}
return true;
}
private String addKind(String name,String desc) throws Exception{
//使用Map封装请求参数
Map<String, String> map = new HashMap<String, String>();
map.put("kindName", name);
map.put("kindDesc", desc);
//定义发送的Url
String url = HttpUtil.BASE_URL +"AddKindServlet";
return HttpUtil.postRequest(url,map);
}
}
7.效果图: