標籤:9.1 break post message intent ast json對象 trace entity
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; } } };
android註冊登入介面