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

servlet과 dopost로 데이터 주고 받는것 질문 드릴께요..

0 추천

servlet과 안드로이드간에 dopost로 주고 받을려고 합니다.

양쪽다 에러는 없는데,

소스코드 실행하면 에러창 뜨면서 앱이 바로 닫혀버리네요...

그리고 servlet 웹사이트 열면 항상 doget이 실행 되는데.

원래 이런건가요? 아니면 제가 잘못 한걸까요?

고수님들 부탁 드립니다.

소스코드 (post부분)

 String result =null;
    public void postData(String input) {
     System.out.println("2");
     HttpClient httpclient = new DefaultHttpClient();
      System.out.println("5");
     HttpPost httppost = new HttpPost("http://localhost:8888/test/Testservlet");
      System.out.println("6");
     try{
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
      nameValuePairs.add(new BasicNameValuePair("name",input));
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
      HttpResponse response = httpclient.execute(httppost);
      
      HttpEntity entity = response.getEntity();
      InputStream is = entity.getContent();
      
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"),8);
      StringBuilder sb = new StringBuilder();
      String line = null;
      while((line = reader.readLine()) != null) {
       sb.append(line).append("\n");
      }
      is.close();
      result = sb.toString();
      Toast.makeText(Menu.this, result,Toast.LENGTH_LONG).show();
      
     }  catch(IOException e) {
     } finally {
      httpclient.getConnectionManager().shutdown();
     }
    }

servlet 소스코드


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Testservlet
 */
public class Testservlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Testservlet() {
        super();
        // TODO Auto-generated constructor stub
    }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  response.setContentType("text/html;charset=UTF-8");
  System.out.println("doGet 요청됨");
  //request로 넘어온 값 받기 
  String name = request.getParameter("name");
  System.out.println("이름 = "+ name + "<br>");
  
  PrintWriter out = response.getWriter();
  out.print("response:" + name);
 }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  response.setContentType("text/html;charset=UTF-8");
  System.out.println("doPost 요청됨");
  doGet(request,response);
 }

}

 

오드아덴 (190 포인트) 님이 2013년 3월 14일 질문
에러 코드도 같이 올려주시는게 더 도움이 될듯 합니다
03-15 10:21:11.435: I/ViewRootImpl(31157): ViewRoot's MotionEvent : Down
03-15 10:21:11.505: D/AudioManager(31157): playSoundEffect() : effectType = 0Request Package = ac.awst.findposition
03-15 10:21:11.505: I/System.out(31157): 0000000000
03-15 10:21:11.505: I/System.out(31157): 11111111111
03-15 10:21:11.505: I/ViewRootImpl(31157): ViewRoot's MotionEvent : Up
03-15 10:21:11.515: I/System.out(31157): 22222222222
03-15 10:21:11.515: I/System.out(31157): 33333333333
03-15 10:21:11.525: W/dalvikvm(31157): threadid=1: thread exiting with uncaught exception (group=0x41abf438)
03-15 10:21:11.525: E/AndroidRuntime(31157): FATAL EXCEPTION: main
03-15 10:21:11.525: E/AndroidRuntime(31157): android.os.NetworkOnMainThreadException
03-15 10:21:11.525: E/AndroidRuntime(31157):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at libcore.io.IoBridge.connect(IoBridge.java:112)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at java.net.Socket.connect(Socket.java:832)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at ac.awst.findposition.Menu.postData(Menu.java:145)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at ac.awst.findposition.Menu.initWIFIScan(Menu.java:87)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at ac.awst.findposition.Menu.onClick(Menu.java:121)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at android.view.View.performClick(View.java:4114)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at android.view.View$PerformClick.run(View.java:17097)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at android.os.Handler.handleCallback(Handler.java:615)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at android.os.Looper.loop(Looper.java:137)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at android.app.ActivityThread.main(ActivityThread.java:4885)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at java.lang.reflect.Method.invokeNative(Native Method)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at java.lang.reflect.Method.invoke(Method.java:511)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
03-15 10:21:11.525: E/AndroidRuntime(31157):     at dalvik.system.NativeStart.main(Native Method)
우선 답변 주신거 감사합니다. ~~
에러코드는 이렇게 나타나구요 실행해서 보면 response 받는 부분에서 에러가 발생합니다.
아직 초보 단계라 어디서부터 공부하고 수정해야 할지 잘 모르겠네요.
예 Internet 퍼미션 줬습니다.
ggggggggggggggggggggggggg

2개의 답변

0 추천
AndroidManifest.xml에 INTERNET 퍼미션 주셨나요?

그리고 웹브라우저 주소창에 주소 입력해서 서블릿 호출하면 GET 방식으로 호출되는게 맞습니다.

에러 로그가 없어서.. 정확히 답변을 할 수가 없네요..
isul (7,920 포인트) 님이 2013년 3월 15일 답변
0 추천

03-15 10:21:11.525: E/AndroidRuntime(31157): android.os.NetworkOnMainThreadException

 

메인쓰레드에서 네트워크 요청해서 그런거 같네요...

쓰레드나 aynctask로 호출해보세요

jelly (1,630 포인트) 님이 2013년 3월 15일 답변
감사합니다. 말씀하신게 맞네요
안드로이드 버젼업 되면서 메인 쓰레드에서는 네트웍 요청을 못하게 되었습니다. asynctask로 처리해서 해결 했습니다.
...