'Get'에 해당되는 글 1건

  1. 2013.12.03 Get방식을 이용한 로그인 구현 1
2013. 12. 3. 23:20

안드로이드에서 웹서버와 통신을 해서 로그인을 구현하려고 합니다.





이런 형식입니다.

단순히 안드로이드에서 입력된 ID, Password를 웹서버로 보내고 HTML형식을 받아서 TextView에 뿌려주는 기능입니다.


오늘은 웹서버와 DB가 구축되어 있다고 가정하고 안드로이드에서 웹서버에 Get방식으로 보내고 읽는 코드만 보여드리겠습니다.

(사실 현재 컴퓨터에는 웹서버와 Database가 구축되어 있지 않습니다. ;;;)


안드로이드 소스는 아래와 같습니다.


public class MainActivity extends Activity implements OnClickListener{
 
 Handler handler = new Handler();
 //메인스레드와 작업스레드간에 교량 역할을 한다.
 //안드로이드 3.0(허니콤) 버전부터 작업스레드가
 //화면 UI에 직접 접근하는것이 차단되었다.
 //화면 UI는 무조건 Handler 객체를 통해서 해야만 한다.
 EditText editUserid;
 EditText editPasswd;
 Button btnLogin;
 TextView txtResult;
 String result;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initWidget();
  
 }
 
 void initWidget(){
  btnLogin = (Button) findViewById(R.id.btnLogin);
  txtResult = (TextView) findViewById(R.id.txtResult);
  editUserid = (EditText) findViewById(R.id.editUserid);
  editPasswd = (EditText) findViewById(R.id.editPasswd);
  
  btnLogin.setOnClickListener(this);
  
  //TextView 스크롤기능 추가
  txtResult.setMovementMethod(new ScrollingMovementMethod());
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }
 
 @Override
 public void onClick(View arg0) {
  showDialog(1);
  
  String userid = editUserid.getText().toString();
  String passwd = editPasswd.getText().toString();

  
  ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
  list.add(new BasicNameValuePair("userid", userid));
  list.add(new BasicNameValuePair("passwd", passwd));

     //예시
     //"http://192.168.0.1:8080/MyService/login.jsp?" + URLEncodeUtils.format(list, "utf-8");
     //위와 같이 접속할 서버의 IP:PORT/서버프로젝트명/웹페이지명 을 적으시고 
     //뒤에 인코딩 설정부분 추가하시면 됩니다.
    final String urlPath = "http://" + IP번호:PORT번호 + "/서버프로젝트명/웹페이지명.jsp?" + 
       URLEncodedUtils.format(list, "utf-8");
  
  Thread t = new Thread(new Runnable() {
   
   @Override
   public void run() {
    InputStream is = requestGet(urlPath);
    result = streamToString(is);
    
    handler.post(new Runnable() {
     
     @Override
     public void run() {
      txtResult.setText(result);
      removeDialog(1);
     }
    });
   }
  });
  t.start();
 }
 
 public InputStream requestGet(String requestUrl) {
  
  try {
   HttpClient client = new DefaultHttpClient();
   HttpGet request = new HttpGet(requestUrl);
   HttpResponse response = client.execute(request);
   
   HttpEntity entity = response.getEntity();
   InputStream is = entity.getContent();
   
   return is;
  } catch (ClientProtocolException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
  return null;
 }
 
 public String streamToString(InputStream is) {
  StringBuffer buffer = new StringBuffer();
  
  try {
   BufferedReader reader = new BufferedReader(new InputStreamReader(is));
   String str = reader.readLine();
   while( str!=null ){
    buffer.append(str);
    str = reader.readLine();
   }
   reader.close();
  } catch (IOException e) {
   e.printStackTrace();
  }  
  return buffer.toString();
 }

 @Override
 @Deprecated
 protected Dialog onCreateDialog(int id) {
  ProgressDialog dialog = ProgressDialog.show(this, "Login", "processing...");
  return dialog;
 } 
}


안드로이드 자바코드는 우선 이렇구요.

코드 설명부분은 시간이 늦어서 다음에 이어서 하도록 하겠습니다.


Posted by Thread