로그인 화면 구현중에 있습니다.


로그인화면은 처음에 스레드를 활용하여 2초간 "로딩중입니다.." 라는 메세지가 나온 후, 


2초가 지나면 AlertDialog가 뜨면서 로그인 화면이 나옵니다.


로그인 화면에서 아이디와 패스워드를 입력하면 jsp를 불러서 아이디와 패스워드가 db에 입력되어있는지 여부를 판단한 후에 

xml을 통하여 <result>success</result> 라는 메세지를 리턴하여 xmlParsing을 통하여 로그인 여부를 판단합니다.


이후 boolean 값을 활용하여 login 여부를 체크하고 이후에 다음 액티비티로 넘어가는 구조입니다..


하지만 이게 잘 되질 않네요.. 아마 boolean값이 제대로 저장이 안되는듯 한데 고수님들의 조언좀 부탁드리겠습니다 ㅠ...


package org.Messanger;


public class MessangerAcitivy extends Activity implements Callback, Runnable {

/** Called when the activity is first created. */


Handler mHandler = null;

Thread thread = null;

String id = null;

String pass = null;

Login log = null;


public boolean isLogin = false;


@Override

public void onCreate(Bundle savedInstanceState) {

.....


mHandler = new Handler(this);

thread = new Thread(this);

thread.start();

}


public void run() {

// TODO Auto-generated method stub


Message msg = Message.obtain(mHandler, 1000, 0, 0);

mHandler.sendMessage(msg);


try {

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} // 1초 = 1000


msg = Message.obtain(mHandler, 2000, 0, 0);

mHandler.sendMessage(msg);

}


public boolean handleMessage(Message msg) {

// TODO Auto-generated method stub

switch (msg.what) {

case 1000: {


ProgressDialog.show(MessangerAcitivy.this, "", "로딩중입니다.", true);


break;

}

case 2000: {

showLoginDialog();

if (isLogin) {

Intent intent = new Intent(this, contentView.class);

startActivity(intent);

finish();

}

break;

}

}


return true;

}


@Override

protected void onDestroy() {

// TODO Auto-generated method stub


if (mHandler != null) {

mHandler.removeMessages(1000);

mHandler.removeMessages(2000);

}


if (thread != null) {

try {

thread.join();

thread.stop();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

super.onDestroy();

}


private void showLoginDialog() {


LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

View layout = inflater.inflate(R.layout.login,

(ViewGroup) findViewById(R.id.login));


final EditText etID = (EditText) layout.findViewById(R.id.etID);

final EditText etPASS = (EditText) layout.findViewById(R.id.etPASS);

final CheckBox cb = (CheckBox) layout.findViewById(R.id.checkBox1);


AlertDialog.Builder aDialog = new AlertDialog.Builder(

MessangerAcitivy.this);

aDialog.setView(layout);


aDialog.setPositiveButton("로그인", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

id = etID.getText().toString();

pass = etPASS.getText().toString();


callJSP(id, pass);

if (cb.isChecked()) {

Log.v("login box check", "checked");

}

}

});

aDialog.setNegativeButton("회원가입",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {


}

});

AlertDialog ad = aDialog.create();

ad.show();

}


public void callJSP(String id, String pass) {

log = new Login(id, pass);

isLogin = log.loginProcess(); // 로그인 버튼이 클릭되면 로그인 처리를 시작한다.


if (isLogin) {

Log.v("boolean check2", "boolean = true");

Toast.makeText(MessangerAcitivy.this, "로그인을 성공하였습니다.",

Toast.LENGTH_SHORT).show();

} else {

Log.v("boolean check2", "boolean = false");


}


}

}




package org.Login;


public class Login {

// private ProgressDialog pDialog;

private String id;

private String pass;

public static boolean isLogin;


public Login(String id, String pass) {

this.id = id;

this.pass = pass;

}


// 네트웍 처리결과를 화면에 반영하기 위한 안드로이드 핸들러

// responseHandler에 의해 처리된 결과가 success인 경우 바탕화면을 초록색으로 바꾸고

// 로그인이 성공했다는 메시지를 토스트로 출력

// 로그인이 실패한 경우 바탕화면을 빨강색으로 바꾸고 로그인실패 메시지를 토스트로 출력

private final Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

// pDialog.dismiss();

/*

* String result = msg.getData().getString("RESULT"); if

* (result.equals("success")) { Log.v("result", result);

*/

// setLogin(true);

if (isLogin) {

Log.v("boolean check", "true");

} else

Log.v("boolean check", "false");

/*

* } else if (result.equals("failed")) { setLogin(false); }

*/}

};


// 서버에서 전송된 XML 데이터를 파싱하기 위한 메서드

// 이 예제에서는 서버에서 로그인이 성공하는 경우(id=kim&passwd=111)하는 경우

// <result>success</result>

// 실패하는 경우 <result>failed</result>를 반환하도록 설정해 두었다.

public String parsingData(InputStream input) {

String result = null;

try {

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

XmlPullParser parser = factory.newPullParser();

parser.setInput(new InputStreamReader(input));

while (parser.next() != XmlPullParser.END_DOCUMENT) {

String name = parser.getName();

if (name != null && name.equals("result"))

result = parser.nextText();

}

} catch (Exception e) {

e.printStackTrace();

}

return result;

}


// 로그인 버튼이 클릭되면 수행되는 메서드

// responseHandler는 Http요청에 대한 HttpResponse가 반환되면 결과를 처리하기 위한

// 콜백메서드를 정의하고 있는 객체이다.

// Response를 받게 되면 parsingData()메서드를 호출하여 서버로 부터 받은 XML 파일을 처리하여

// 그결과를 result 문자열로 반환받는다.

// 이렇게 반환받은 result문자열을 화면에 반영하기위해 안드로이드UI핸들러인 handler를 통해 값을 전달한다.

public boolean loginProcess() {

final ResponseHandler<String> responseHandler = new ResponseHandler<String>() {

@Override

public String handleResponse(HttpResponse response)

throws ClientProtocolException, IOException {

String result = null;

HttpEntity entity = response.getEntity();

result = parsingData(entity.getContent());

Message message = handler.obtainMessage();

Bundle bundle = new Bundle();

if (result.equals("success")) {

isLogin = true;

// loginSuccess();

} else

isLogin = false;

message.setData(bundle);

handler.sendMessage(message);


Log.e("result", "response = " + result);


// String resultData = message.getData().getString("RESULT");


return result;

}

};


// 로그인이 처리되고 있다는 다이얼로그를 화면에 표시한다.

// pDialog=ProgressDialog.show(this, "", "로그인 처리중....");


// 서버에 HTTP 처리 요청은 새로운 스레드를 생성하여 비동기식으로 처리하는것이 효율적이다.

new Thread() {

@Override

public void run() {

String url = "http://192.168.0.3:8080/jws/mixare/login/login.jsp";

HttpClient http = new DefaultHttpClient();

try {

// 서버에 전달할 파라메터 세팅

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

nameValuePairs.add(new BasicNameValuePair("id", id));

nameValuePairs.add(new BasicNameValuePair("passwd", pass));


// 응답시간이 5초가 넘으면 timeout 처리하려면 아래 코드의 커맨트를 풀고 실행한다.

// HttpParams params = http.getParams();

// HttpConnectionParams.setConnectionTimeout(params, 5000);

// HttpConnectionParams.setSoTimeout(params, 5000);


// HTTP를 통해 서버에 요청을 전달한다.

// 요청에 대한결과는 responseHandler의 handleResponse()메서드가 호출되어

// 처리한다.

// 서버에 전달되는 파라메터값을 인코딩하기위해 UrlEncodedFormEntity() 메서드를 사용한다.

HttpPost httpPost = new HttpPost(url);

UrlEncodedFormEntity entityRequest = new UrlEncodedFormEntity(

nameValuePairs, "UTF-8");

httpPost.setEntity(entityRequest);

http.execute(httpPost, responseHandler);

} catch (Exception e) {

e.printStackTrace();

}

}

}.start(); // 스레드를 실행시킨다.

if(isLogin)

return true;

else

return false;


}

}




jsp파일은 첨부하도록 하겠습니다...