希望童鞋可以看一下我关于服务器端的一些说明:指尖的Android之实战篇--说明篇(二)
接下来,就开发我们的客户端开发之旅吧
首先关于图片资源,可以到我的相册中下载:相册名Auction
一、用户登录:
这个功能分两篇博客
1.布局:login.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg"
android:stretchColumns="1"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:src="@drawable/logo"
/>
<TextView
android:id="@+id/TextView"
android:text="@string/welcome"
android:textSize="@dimen/label_font_size"
android:textColor="@color/white"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:padding="@dimen/title_padding"
/>
<!-- 输入用户名 -->
<TableRow>
<TextView
android:text="@string/uesr_name"
android:textColor="@color/white"
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/label_font_size"
/>
<EditText
android:text=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/userEditText"
/>
</TableRow>
<!-- 输入密码行 -->
<TableRow>
<TextView
android:text="@string/user_pass"
android:textColor="@color/white"
android:id="@+id/TextView"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:text=""
android:id="@+id/pwdEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
/>
</TableRow>
<!-- 定义登录、取消按钮的行 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
>
<Button
android:id="@+id/bnLogin"
android:text="@string/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:text="@string/cancel"
android:id="@+id/bnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</TableLayout>
2用到的字符串stings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Login!</string>
<string name="app_name">AuctionClient</string>
<string name="welcome"> 欢迎使用591拍卖系统</string>
<string name="uesr_name">用户账号:</string>
<string name="user_pass">用户密码:</string>
<string name="login">登录</string>
<string name="cancel">取消</string>
<string name="add">添加</string>
<string name="bid">竞价</string>
<string name="view_succ">浏览竟得物品</string>
<string name="view_bid">您参与竞标的物品</string>
<string name="view_fial">浏览流拍的物品</string>
<string name="manage_item">您当前的拍卖的物品</string>
<string name="manage_kind">系统的所有的物品种类</string>
<string name="choose_kind">请选择一个物品种类</string>
<string name="item_list">当前种类的物品</string>
<string name="item_name">物品名:</string>
<string name="item_kind">物品种类:</string>
<string name="item_desc">物品描述:</string>
<string name="win_price">赢取价格:</string>
<string name="max_price">最高竞价:</string>
<string name="remark">物品备注:</string>
<string name="init_price">起拍价格:</string>
<string name="avail_time">有效时间:</string>
<string name="end_time">结束时间:</string>
<string name="bid_price">竞标价格:</string>
<string name="bid_time">竞标时间:</string>
<string name="bid_user">竞标人:</string>
<string name="add_kind_title">添加物品种类</string>
<string name="add_item_title">添加拍卖物品</string>
<string name="kind_name">种类名称:</string>
<string name="kind_desc">种类描述:</string>
<string name="item_detail_title">物品详情</string>
<string name="you_bid">您的竞价:</string>
</resources>
3. arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="menu">
<item>查看竞得物品</item>
<item>浏览流拍物品</item>
<item>管理物品种类</item>
<item>管理物品</item>
<item>浏览拍卖物品</item>
<item>查看自己的竞标</item>
</string-array>
<string-array name="availTime">
<item>一天</item>
<item>二天</item>
<item>三天</item>
<item>四天</item>
<item>五天</item>
<item>一个星期</item>
<item>一个月</item>
</string-array>
</resources>
4.colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#FFFFFFFF</color>
<color name="transparency">#00000000</color>
<color name="title_bg">#FF9ed913</color>
<color name="end_color">#A0cfef83</color>
<color name="grey">#bbb</color>
</resources>
5.dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="label_font_size">20dip</dimen>
<dimen name="title_padding">30px</dimen>
<dimen name="sub_title_margin">20px</dimen>
</resources>
5 用户登录的Activity:Login.java
package com.infy.auction.client;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONObject;
import com.infy.auction.client.util.DialogUtil;
import com.infy.auction.client.util.HttpUtil;
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.EditText;
public class Login extends Activity {
private static final String TAG = "Login";
// 定义界面中的两个文本框
EditText etName;
EditText etPass;
// 定义界面中的两个按钮
Button bnLogin;
Button bnCancel;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
// 获取界面中的两个编辑文本框
etName = (EditText) findViewById(R.id.userEditText);
etPass = (EditText) findViewById(R.id.pwdEditText);
// 获得界面中的两个按钮
bnLogin = (Button) findViewById(R.id.bnLogin);
bnCancel = (Button) findViewById(R.id.bnCancel);
// 为bnCancal按钮的单击事件绑定监听器
bnCancel.setOnClickListener((OnClickListener) new FinishListener(this));
bnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 进行输入检验
if (validate()) {
// 如果登录成功
if (loginPro()) {
Intent intent = new Intent(Login.this, Main.class);
startActivity(intent);
// 结束该Activity
finish();
}
}
}
});
}
// 定义内部类
private class FinishListener {
public FinishListener(Login login) {
// TODO Auto-generated constructor stub
etName.setText("");
etPass.setText("");
}
}
// 登录验证
public boolean loginPro() {
// 获取用户名和密码
String username = etName.getText().toString().trim();
String pwd = etPass.getText().toString().trim();
JSONObject jsonObj;
try {
Log.i(TAG, "Login---");
jsonObj = query(username, pwd);
Log.i(TAG, "Login--->" + jsonObj.getString("userId"));
// 如果userid大于0
if (jsonObj.getInt("userId") > 0) {
return true;
}
} catch (Exception e) {
DialogUtil.showDialog(this, "服务器响应异常,请稍后再试", false);
e.printStackTrace();
}
return false;
}
// 对用户名、密码进行检验
private boolean validate() {
String username = etName.getText().toString().trim();
if (username.equals("")) {
DialogUtil.showDialog(this, "用户账户是必填项", false);
return false;
}
String pwd = etPass.getText().toString().trim();
if (pwd.equals("")) {
DialogUtil.showDialog(this, "用户密码不能为空!", false);
return false;
}
return true;
}
// 定义发送请求的方法
private JSONObject query(String username, String password) throws Exception {
// 使用MAP封装请求参数
Map<String, String> map = new HashMap<String, String>();
map.put("user", username);
map.put("pass", password);
// 定义发送请求的URL、
String url = HttpUtil.BASE_URL + "servlet/LoginServlet";
// 发送请求
return new JSONObject(HttpUtil.postRequest(url, map));
}
}
最后,给出登录的效果图: