마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

앱에서 웹과 연동하여 로그인호출 질문입니다.

0 추천
public class MainActivity extends Activity {
 
EditText userid;
EditText passwd;
Button login;
TextView text;
Handler handler = new Handler();
 
String result;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
userid = (EditText) findViewById(R.id.userid);
passwd = (EditText) findViewById(R.id.passwd);
login = (Button) findViewById(R.id.login);
text = (TextView) findViewById(R.id.text);
 
// 버튼 이벤트 처리
login.setOnClickListener(new OnClickListener() {
 
@Override
public void onClick(View v) {
showDialog(1);
 
String userid1 = userid.getText().toString();
String passwd1 = passwd.getText().toString();
 
// 서버에 넘겨줄 파라미터 저장
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("userid", userid1));
list.add(new BasicNameValuePair("passwd", passwd1));
 
final String urlPath = "http://url주소/xml/xmlApp.php?userid="
+ userid + "&passwd=" + passwd;
 
// 네트워크 연동을 위한 작업 스레드 생성
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() {
text.setText(result);
removeDialog(1);
}
});
 
}
});
t.start();
}
});
 
} // end onCreate
 
// Get 요청처리 메소드
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 (Exception e) {
e.printStackTrace();
}
return null;
 
}// end requestGet
 
//
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 (Exception e) {
e.printStackTrace();
}
return buffer.toString();
 
}// end streamToString
 
@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;
}
 
}
 
아이디와 비밀번호를 입력하면 위에 파란글씨로 표시되어있는 url로 접속하여 
웹과 호출하고 아이디와 비밀번호 일치시 텍스트창에 아이디와 비밀번호를 띄워주는 것을 해보고 있는데요. 
아이디 비번 입력후 버튼을 누르면 텍스트창에
android.widget.EditText@4178f7f8android.widget.EditText@417f3ba0 이라는 메시지가 나오는데요 어떻게 수정해야 할까요? 
qwlwwmq (560 포인트) 님이 2014년 2월 3일 질문

1개의 답변

0 추천

지금 작성하신 코드에는 전혀문제가없습니다.. 

streamToString메서드에서 로그 찍어보셨나요?

whdrb19 (23,520 포인트) 님이 2014년 2월 3일 답변
수정하였습니다. url입력 부분에서 텍스트 입력 아이디 값을 잘못 입력하였었네요 ㅠ
현재 접속하여 존재하는 아이디면 1이 나타나고
존재하지 않는 아이디면 0이 나타나도록 구현되었는데요.
이것을 1이 나타날시 로그인 성공 메시지 출력
0이 나타날시 로그인 실패 메시지가 출력 되도록 구현하려면 어떻게 해야될까요?
서버에서 result값을 성공0 실패1로 준다면

기존코드가 Handler handler = new Handler();
==================================
Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                super.handleMessage(msg);
                if (msg.what == 0) {
                    //성공 했을때 UI처리
                } else if(msg.what == 1) {
                    //실패 했을때 UI처리
                } else{
                    //기타 오류 UI처리
                }
            }
        };
이렇게 바뀌구요..

result = streamToString(is); 바로밑에
handler.sendEmptyMessage(what);여기에result가 무조건 0또는1로 탈지도 미지수니.. 성공시 what파라미터에 0 또는 1로 처리하면 됩니다.
Handler는 Thread안에서 값을 뽑아내면 그결과값을 UI Thread로전달하기위한
수단 이라고 생각하시면 편합니다.
...