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

gson 방식으로 서버 정보를 받아와야하는데 어떻게해야하는지 잘모르겠어요 ㅠ

0 추천
package org.android.test1;

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

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
public class LoginAct extends Activity {

 Button Login;
 EditText WorkerNum;
 CheckBox IdSave;
 CheckBox AutoLogin;
 TextView tv;
 HttpPost httppost;
 StringBuffer buffer;
 HttpResponse response;
 HttpClient httpclient;
 List<NameValuePair> nameValuePairs;
 ProgressDialog dialog = null;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.loginpage);

  Login = (Button) findViewById(R.id.login);
  WorkerNum = (EditText) findViewById(R.id.workernum);
  IdSave = (CheckBox) findViewById(R.id.idsave);
  AutoLogin = (CheckBox) findViewById(R.id.autologin);
  tv = (TextView) findViewById(R.id.error);

  Login.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    dialog = ProgressDialog.show(LoginAct.this, "",
      "사원번호를 확인중입니다.", true);
    new Thread(new Runnable() {
     public void run() {
      login();
     }
    }).start();
   }
  });
 }

 void login() {
  try {
   httpclient = new DefaultHttpClient();
   httppost = new HttpPost(
     "http://192.168.123.145:8079/Test4/test13.jsp");
   Gson gson = new Gson();
   nameValuePairs = new ArrayList<NameValuePair>(1);
   nameValuePairs.add(new BasicNameValuePair("ID", WorkerNum.getText()
     .toString()));
   httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
   response = httpclient.execute(httppost);
   ResponseHandler<String> responseHandler = new BasicResponseHandler();
   final String response = httpclient.execute(httppost,
     responseHandler);
   System.out.println("Response : " + response);
   runOnUiThread(new Runnable() {
    public void run() {
     tv.setText("Response from JSP : " + response);
     dialog.dismiss();
    }
   });

   if (response.equalsIgnoreCase("확인되었습니다.")) {
    runOnUiThread(new Runnable() {
     public void run() {
      Toast.makeText(LoginAct.this, "성공", Toast.LENGTH_SHORT)
        .show();
     }
    });
    startActivity(new Intent(LoginAct.this, UserPage.class));
   } else {
    showAlert();
   }

  } catch (Exception e) {
   dialog.dismiss();
   System.out.println("Exception : " + e.getMessage());
  }
 }

 public void showAlert() {//
  LoginAct.this.runOnUiThread(new Runnable() {
   public void run() {
    AlertDialog.Builder builder = new AlertDialog.Builder(
      LoginAct.this);
    builder.setTitle("Login Error.");
    builder.setMessage("User not Found.")
      .setCancelable(false)
      .setPositiveButton("OK",
        new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog,
           int id) {
         }
        });
    AlertDialog alert = builder.create();
    alert.show();
   }
  });
 }
}

 

왕초짜 (110 포인트) 님이 2014년 2월 11일 질문
어디가 어떻게 안되는지도 없이 달랑 소스만 올려놓으면 보는 사람이 귀찮아서 답변 잘 안달아줍니다...
죄송합니다. 안드로이드 에뮬로 돌려서 테스트하면 값이 넘어오지 않습니다. gson 형식으로 맞추어야하는데 어딜 어떻게 맞춰야하는지 저도 감이 안와서 어쩔수 없이 이렇게 올렸어요 ㅠ// 물론 jsp에서는 정확하게 값이 응답이 됩니다.
실제 기기에서도 해보셨나요?
실제기기는 안해봤어요. 아이폰이라서 에뮬로만 하고 있어요.
genymotion으로 해보세요
그리고 네트워크 통신은 메인스레드에서 돌리면 안됩니다. 스레드나 AsyncTask 등으로 하셔야 합니다. 오류 로그를 먼저보고 성공했다면 받아온 값을 로그로 찍어보고 서버쪽 로그도 보세요. 소스를 이렇게 덜렁 올리는 것은 난 힘들지만 답을 알고 싶지는 않다는 무언의 외침입니다.

2개의 답변

0 추천
메인에서 네트워크 작업을 하여 뻗어버린게 아닌가 싶네요. 코드만 있다보니..

일단은 네트워크 작업 부분을 쓰레드로 구현하여 다시 실행해보시면 어떨까요?
인연 (31,880 포인트) 님이 2014년 2월 12일 답변
0 추천

예뮬내 웹브라우저에서 http://192.168.123.145:8079/Test4/test13.jsp

접속시 접속이 되는지 먼저 확인 해야 할 것 같습니다.

접속이 된다면 catch 부분의 로그를 살펴 보아야 할듯 하구요...

catch 부분에 e.printStackTrace(); 을 추가한후 로그를 보시는게 도움이 될 듯 합니다.

삽질하세 (1,250 포인트) 님이 2014년 2월 12일 답변
...