Android 는 클 라 이언 트 와 서버 의 상호작용 (로그 인 기능) 을 개발 합 니 다.

    :     《Android Client Service     》

이틀 동안 클 라 이언 트 와 서버 의 상호작용 을 배우 고 로그 인 기능 을 간단하게 했다.
\ # 준비 작업:
1, 자바 EE 개발 환경 구축, 해당 eclipse 다운로드
2, Tomcat 설치
3, tomcat eclipse 플러그 인 설치,http://www.eclipsetotale.com/tomcatPlugin/
\ # 바로 시작:
1. 다이나믹 웹 프로젝트 를 새로 만 듭 니 다. 기본 값 으로 합 시다.
2. 과정 지도 에 따라 tomcat -- > lib 폴 더 의 세 개의 파일 을 프로젝트 디 렉 터 리 (WebContent -- > lib) 에 넣 습 니 다.
* el-api.jar; jsp-api.jar; servlet-api.jar
3, src 폴 더 아래, 새 패키지 와 클래스, 클래스 LoginServlet4Android 확장 HttpServlet
새로 만 들 면 두 가지 주요 실현 방법 이 있 을 것 이다 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("---get---");
		this.doPost(request, response);
	}

	/**
	 *  URL?para1=value1 2=value2&...
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		// 
		
		//
		request.setCharacterEncoding("UTF-8");
		
		//
		String loginName = request.getParameter("LoginName");
		String loginPassWord = request.getParameter("LoginPassWord");
		
		/**
		 * text/html
		 */
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8"); 
		PrintWriter out = null;
		/**
		 * Login logical judge
		 */
		DataOutputStream output = new DataOutputStream(response.getOutputStream());
		try{
			out = response.getWriter();
			if(loginName.equals("sun") && loginPassWord.equals("011"))
			{
				//right to client  response..
				output.writeUTF("server data: success!");
				output.writeInt(1);
			}
			else
			{
				//wrong
				output.writeUTF("server data: fail!");
				out.print("failed");
			}
		}
		finally
		{
			if(out != null)
				out.close();
			if(output != null)
				output.close();
		}
		
	}

서버 쪽 의 코드 는 비교적 간단 하 며 주로 doPost 에서 데 이 터 를 받 고 검증 합 니 다.후기 에는 데이터베이스 에 해당 하 는 데 이 터 를 저장 할 수 있 기 를 희망 한다.
------------------------------------------------------------------------------------------------------------------------------------------------------
Android 엔 드 의 실현:
package com.example.service;

import java.lang.ref.WeakReference;

import com.example.mapsun.LoginActivity;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;

public class LoginAsyncTask extends AsyncTask {

	boolean result = true;
	String g_loginName, g_loginPassword;
	private final WeakReference mActivity;
	private static ProgressDialog dialog;
	
	public LoginAsyncTask(LoginActivity activity, String loginName, String loginPassword)
	{
		g_loginName = loginName;
		g_loginPassword = loginPassword;
		mActivity = new WeakReference(activity);
	}
	
	@Override  
    protected void onPreExecute() {  
		if(null == dialog){
			dialog = new ProgressDialog(mActivity.get());
		}
		dialog.setTitle("please wait");
		dialog.setMessage("Logining...");
		dialog.setCancelable(false);
		dialog.show();
    }  
	



	@Override
	protected Object doInBackground(Object... arg0) {
		// TODO Auto-generated method stub
		UserService userServ  = new UserServiceImpl();
		try {
			result = userServ.userLogin(g_loginName, g_loginPassword);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
	
	//
	protected void onPostExecute(Object result) {
        
        //            
		String strMsg;
		if(result.equals(true))
		{
			strMsg = "success";
		}
		else
			strMsg = "failed";
		((LoginActivity)mActivity.get()).ShowTip(strMsg);
        //     
        dialog.cancel();
    }
}

여기 서 AsyncTask 를 계승 하 는 클래스 를 실현 하고 서버 의 요청 을 비동기 로 보 내 며 구조 함수 에서 인터페이스의 일부 인 자 를 전달 하여 인터페이스의 변 화 를 실현 합 니 다.
이런 종류의 내 이전 블 로그 에서 도 비동기 로 디 스 플레이 그림 을 불 러 오 는 작업 을 한 적 이 있다.아주 좋 습 니 다. 사실은 바 텀 페이지 에 Handler 의 조작 을 밀봉 하 였 습 니 다.
자, 오늘 은 이틀 간 의 실현 코드 를 대충 붙 여 보 겠 습 니 다. 안 드 로 이 드 폰 은 컴퓨터 에 있 는 서버 에 접근 할 수 없 지만 어 제 는 괜 찮 았 습 니 다.
= = = = = = = = = = = = = = = = = = = = = = = = = = 보충: UserService 의 userLogin 기능 실현 = = = = = = = = = = = = = = = = = = = 2014 - 12 - 10 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
주로 서버 측의 데이터 조작 을 수신 합 니 다. 코드 는 다음 과 같 습 니 다.
package com.example.service;

public class UserServiceImpl implements UserService {

	private static final String TAG = "UserServiceImplement";
	
	@Override
	public boolean userLogin(String loginName, String loginPassword)
			throws Exception {
		// TODO Auto-generated method stub
		
		
		String result;
		HttpPost httpPost = new HttpPost(UriAPI.HTTPCustomer);
		
		//create params
		List params = new ArrayList();
		params.add(new BasicNameValuePair("LoginName", loginName));
		params.add(new BasicNameValuePair("LoginPassWord", loginPassword));
		
		try{
			//encode data
			httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
			HttpResponse httpResp = new DefaultHttpClient().execute(httpPost);
			//get response 
			if (httpResp.getStatusLine().getStatusCode()==200) {
                             byte[] data =new byte[2048];
                             data =EntityUtils.toByteArray((HttpEntity)httpResp.getEntity());
                             ByteArrayInputStream bais = new ByteArrayInputStream(data);
                             DataInputStream dis = new DataInputStream(bais);
                             result=new String(dis.readUTF());
                                  Log.i("service result:", result);
                             return true;
            }
			
		}catch(ClientProtocolException e){  
            e.printStackTrace();  
        }catch(UnsupportedEncodingException e){  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
		return false;
	}
	


	public class UriAPI{
		//
		public static final String HTTPCustomer = "http://192.168.0.56:8080/firstweb/login.do";
	}
}

요약: 로그 인 기능 은 주로 서버 의 HttpServlet 작업 에 익숙 합 니 다. 그 중에서 자바 웹 과 관련 된 기초 도 배 웠 습 니 다. 안 드 로 이 드 클 라 이언 트 HttpPost 의 실현 과 AsyncTask 류, 그리고 일부 안 드 로 이 드 기본 내용 을 돌 이 켜 보 았 습 니 다. 이 프로젝트 의 시작 이 라 고 할 수 있 습 니 다.
또한 상기 코드 에 많은 세부 적 인 문제 가 존재 합 니 다. 먼저 놓 고 그 다음 에 안 드 로 이 드 클 라 이언 트 의 기능 실현 에 전념 할 것 입 니 다. 인터페이스 레이아웃, 사진 촬영 기능, GPS 궤적 등 을 포함 합 니 다.

좋은 웹페이지 즐겨찾기