android的注册登录界面,主要写一下用到的东西。
首先,后台用jsp写,这里的话用到的返回数据为json,可以用一种很简单的方式
<%@ page language="java" contentType="text/json; charset=UTF-8" pageEncoding="UTF-8" import="java.sql.*,java.io.*,java.util.*" %>
这里面修改 contentType=“text/json”就可以了。
对于客户端,主要是
- 界面之间的跳转
- 对服务器的请求
- 对json数据的解析
1)界面之间的跳转
用Intent,Intent i=new Intent(MainActivity.this,ResActivity.class);
startActivity(i)
2)android的网络请求主要有三个大方式我们这里用httpclinet
首先,android不允许把http请求放在主线程中(容易阻塞),所以必须新建一个副
线程来处理网络请求部分。具体请求时首先用到client(DefaultHttpClient类)用于
执行请求。然后用到HttpPost作为一个post对象(get方法用HttpGet),再是post参数的
设置,UrlEncodedFormEntity entity=new UrlEncodedFormEntity(parameter,"utf-8");
parameter为一个数组列表。
private void get(final String name,final String password){
new Thread(new Runnable(){
public void run(){
BufferedReader reader=null;
StringBuffer sb=null;
String result="";
DefaultHttpClient client=new DefaultHttpClient();
String uri="http://10.65.89.152/server/servers.jsp";
List parameter=new ArrayList();
parameter.add(new BasicNameValuePair("username",name));
parameter.add(new BasicNameValuePair("password",password));
HttpPost request=new HttpPost(uri);
//HttpResponse responses=client.execute(request);
try{
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(parameter,"utf-8");
request.setEntity(entity);
//Toast.makeText(MainActivity.this,"success1 connect",Toast.LENGTH_SHORT).show();
//request.setEntity(entity);
HttpResponse response=client.execute(request);
//Toast.makeText(MainActivity.this,"success2 connect",Toast.LENGTH_SHORT).show();
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//Toast.makeText(MainActivity.this,"success connect",Toast.LENGTH_SHORT).show();
reader=new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
sb=new StringBuffer();
String line="";
String NL=System.getProperty("line.separator");
while((line=reader.readLine())!=null){
sb.append(line);
}
}
//Toast.makeText(MainActivity.this,"faile connect",Toast.LENGTH_SHORT).show();
}catch(ClientProtocolException e){
//Toast.makeText(MainActivity.this,"error connect",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}catch(IOException e){
//Toast.makeText(MainActivity.this,"error2 connect",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
try{
if(null!=reader){
reader.close();
reader=null;
}
}catch(IOException e){
e.printStackTrace();
}
if(null!=sb){
result=sb.toString();
}
Message message = new Message();
message.what = SHOW_RESPONSE;
message.obj = result;
handler.sendMessage(message);
Message messages=new Message();
}
}).start();
}
3)对于json对象的处理。
用到一个jar包 gson。
private void parseJSONWithJSONObject(String jsonData){
try {
//将json字符串jsonData装入JSON数组,即JSONArray
//jsonData可以是从文件中读取,也可以从服务器端获得
JSONArray jsonArray = new JSONArray(jsonData);
String state=null;
String name=null;
String id=null;
for (int i = 0; i< jsonArray.length(); i++) {
//循环遍历,依次取出JSONObject对象
//用getInt和getString方法取出对应键值
JSONObject jsonObject = jsonArray.getJSONObject(i);
// int stu_no = jsonObject.getInt("stu_no");
state=jsonObject.getString("code");
name=jsonObject.getString("name");
id=jsonObject.getString("id");
Log.d("MainActivity","code:"+state);
}
if(state.equals("success")){
Intent ii=new Intent(MainActivity.this,SecActivity.class);
ii.putExtra("USERNAME",name);
ii.putExtra("id", id);
startActivity(ii);
}
} catch (Exception e) {
e.printStackTrace();
}
}
4)主线程与副线程的通信
public static final int SHOW_RESPONSE = 0;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SHOW_RESPONSE:
String response = (String) msg.obj;
//textviews.setText(response);
parseJSONWithJSONObject(response);
break;
default:
break;
}
}
};