希望童鞋可以看一下我关于服务器端的一些说明:指尖的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)); } }
最后,给出登录的效果图: