1. 程式人生 > >Android-使用者登陸的例子(伺服器端開發到客戶端實現)

Android-使用者登陸的例子(伺服器端開發到客戶端實現)

1.回顧

       上篇實現總結了App介面開發課程講解的內容

2.此篇

     這篇將總結app介面開發裡的 使用者登入的例子!

3.基本步驟

    (1)服務端實現 登陸介面 開發

    (2)實現 json 和xml資料封裝類

    (3)編寫 介面開發文件

    (4)實現 app端(安卓(android))開發

4. 伺服器端開發

      基本需求:使用者使用使用者名稱和密碼登陸,登陸後,返回使用者個人資訊。

      這裡,開發 資料庫訪問層和登陸業務我就不寫了。這裡的介面實現是在Servlet 裡實現,通過呼叫登陸業務邏輯,返回使用者個人資訊,後生成json資料或者xml資料。

      再者,填寫介面開發文件。

      最後,通過介面開發文件實現android(安卓)客戶端登陸例子開發。

       提醒:這裡下面將呼叫我自己封裝好的生成json和xml的資料類,需要的可以看看我的另一篇文章:

      下面實現安卓介面開發 servlet  : 

package Interface.app.android;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Interface.app.Util.AppInterface;

import cn.edu.hpu.stumanager.model.Competitor;
import cn.edu.hpu.stumanager.service.CompetitorManager;
import cn.edu.hpu.stumanager.service.CompetitorManagerImpl;

public class app_userlogin extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//設定 編碼格式
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		//獲得 使用者登入 姓名和密碼  (app端需要 傳引數 name和pasd)
		String name=request.getParameter("name");
		String pasd=request.getParameter("pasd");
		
		String str="";
		
		if(!(str.equals(name)&&str.equals(pasd))){
			//這裡實現你的 登陸業務呼叫
		
//			CompetitorManager manager=new CompetitorManagerImpl();
//		    Object object = manager.userLogin("hpujava","111");
//		    Competitor competitor=null;
//			if(object instanceof Competitor){
//				competitor=(Competitor) object;
			    
			    //這裡傳呼叫 生成json 和 xml的 資料生成類  
			     
				str=AppInterface.toJson(1,"success","使用者物件");
//			}else{
//				
//				str=object.toString();
//			}
			
			
		}else{
			
			str="引數為空了!";
		}
		

		response.setContentType("text/json");
		PrintWriter out = response.getWriter();
		out.print(str);
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

         doGet(request, response);
          
	}

}

5.  瀏覽器 通過 get方式 測試

      首先,開啟cmd,輸入 ipconfig 命令 ,獲得本地 ipv4 的地址!將 localhost 換成你的Ipv4地址;

      其次,在瀏覽器裡資料剛才的地址,看可以返回你封裝好的資料不能!

      我的測試地址:

http://192.168.75.1:8080/TennisGameSys/app_userlogin?name=hpujava&pasd=111

      測試資料:
{"data":{"address":"中國廣州","borth":"1983.2.13","id":1,"matchage":3,"password":"111","realname":"李娜","sex":"女","username":"hpujava"},"code":1,"msg":"success"}

6.  app客戶端 本地開發測試

     (1)按 上述的方式 將 localhost 換成你的 ipv4地址 ;

     (2)建議在電腦上 安裝 360wifi ,將你的手機 連線至 自己電腦開啟的wifi ,以便測試;

     (3)如果兩個同時在本地開發,一個人開發app端,一個開發伺服器端,建議 開發app端的 電腦和手機連線置開     發伺服器端開啟的wifi 下,這樣在區域網下進行測試開發;

     (4)如果有條件的話,可以在公網伺服器上進行開發,需要域名;

7. 編寫介面開發文件

     介面開發文件是十分重要的,比方說,你開發了一款app的伺服器端,並且寫了 介面開發文件。過了很長一段時間,想起來了,直接去看介面文件,更直觀,快捷。

    其中更重要的是,如果你開發的伺服器端介面,轉給別人了,別人看起來也是十分方便的。

    這裡就不演示例子了,我在Execl 裡演示寫了剛才的登陸介面的 介面文件,截個圖:

 

     需要哪些注意事項,可以看我的上篇部落格!

8. app端開發——安卓端 使用者登入的例子

    基本步驟:

          (1)新建Android工程 

                 這裡我就不多說了,如果不會的話,下面都不需要看了!

          (2)實現工具類 HttpPath 

                 封裝介面地址,統一管理介面地址,當然這裡沒有考慮安全性,僅僅為了除錯方便

                 示例:

package com.example.http;

public class HttpPath {

	private static final String IP="http://192.168.75.1:8080/";
	
	public static String getUserLoginPath(){
		
		return IP+"TennisGameSys/app_userlogin";
	}
	
}

          (3)實現 工具類 HttpReq 

               封裝 Http請求資料和提交資料類,可以看我的另一篇部落格!

          (4)實現 頁面 佈局 需要 兩個 EditText 和 一個登陸按鈕( Button )

                最基本的佈局實現,不再示例了!

          (5)在 AndroidManifest.xml 檔案裡 新增 網路許可權

   <uses-permission android:name="android.permission.INTERNET"/>

          (6)實現 MainActivity 業務呼叫,這裡直接 上程式碼吧,裡面我寫了註釋 很明白的!
package com.example.demologin;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.message.BasicNameValuePair;

import com.example.http.HttpReq;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

	private EditText et_name,et_pasd;
	private TextView tv;
	private Button btn_login; 
	private Thread thread;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		
		//點選事件
		btn_login.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//開啟子執行緒,實現網路請求
				thread=new Thread(new loginRunnable());
				thread.start();
			}
		});
		
		
		
	}
	
	//初始化 控制元件
  private void initView() {
		// TODO Auto-generated method stub
	   et_name=(EditText)findViewById(R.id.et_name);
	   et_pasd=(EditText)findViewById(R.id.et_pasd);
	   tv=(TextView)findViewById(R.id.textView1);
	   btn_login=(Button)findViewById(R.id.btn_login);
	}

   
  //處理執行緒 UI ,防止堵塞 主執行緒
  Handler handler=new Handler(){
	   
	   public void handleMessage(android.os.Message msg) {
		   
		   Object object=msg.obj;
		   //這裡呼叫json解析  , 實現 activity 調轉 資料傳輸到下一個頁面
		   tv.setText(object.toString());
		   
	   };
	   
   };
   
   
   //子執行緒 實現 網路請求,安卓4.0 及其 之後版本,需要在 子執行緒裡進行 資料訪問
   class loginRunnable implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		
		String name=et_name.getText().toString();
		String pasd=et_pasd.getText().toString();
		
		//get
	  // Object object=	HttpReq.toGetData(name, pasd);
	    
		List<BasicNameValuePair> list=new ArrayList<BasicNameValuePair>();
		list.add(new BasicNameValuePair("name",name));
		list.add(new BasicNameValuePair("pasd",pasd));
	    Object object=HttpReq.topostData(list);
		
	   //傳送資料到 handler
	   Message message=handler.obtainMessage();
	   message.obj=object;
	   handler.sendMessage(message);
		
		
	}
   }
   
   
	
	
}


 9.demo 下載