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

HttpResponse 부분에서 에러가 발생하는데 알려 주실분...

0 추천

안드로이드 폰과 서블릿간의 데이터 주고받는 연습을 하고 있습니다.

그런데, httpresponse 이부분이 실행이 안되고 있습니다.

서블릿은 웹페이지를 통해서는 post문을 실행하는것을 확인했는데요.

책을 보고해도 잘 모르겠습니다. 아시는분 답변 부탁 드립니다.

소스코드와 에러추가 합니다.

package ac.awst.findposition;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

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

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Menu extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
 
 Button btnstart;
 TextView state; 
 TextView showlist;
 TextView appsub;
 Button btnstop;
// private Button checkButton;
 WifiManager wm;
 List<ScanResult> mScanResults;
 
 private int foundCount=0;
 
 private BroadcastReceiver mReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
   final String action = intent.getAction();
   if(action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
    //mScanResults = wm.getScanResults();
    getWifiScanResult();
    wm.startScan();
    //mListAdapter.notifyDataSetChanged();
   } else if (action.equals( WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
    sendBroadcast( new Intent( "wifi.ON_NETWORK_STATE_CHANGED"));
   }
  }
 };
 
 public void getWifiScanResult() {
  mScanResults = wm.getScanResults();
  foundCount = mScanResults.size();
  state.setText("scan count is \t" +  ++foundCount + "    \t APs");
  showlist.setText("\n");
  showlist.append("===============================\n");
  for ( int i=0 ; i < mScanResults.size() ; i++) {
   ScanResult  result = mScanResults.get(i);
   showlist.append((i+1) + ".SSID : " +result.SSID.toString() + "\t\t RSSI : " +result.level + "dBm\n");   
  }
  showlist.append("===============================\n");
 }
 
 @Override
 public void onStart() {
  super.onStart();
  final IntentFilter filter = new IntentFilter( WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
  filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
  registerReceiver(mReceiver, filter);
 }

 public void initWIFIScan() {
  state.setText("Scanning ... ");
  wm.startScan();
  postData("AWST");
 }
 
 public void StopWIFI() {
  //super.onPause();
  state.setText("stop scanning");
  unregisterReceiver(mReceiver); // unregister Broadcast
 } 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        
        btnstart = (Button)findViewById(R.id.startWifi);
        btnstop = (Button)findViewById(R.id.stopWifi);
        state = (TextView)findViewById(R.id.status);
        showlist = (TextView)findViewById(R.id.showlist);
        appsub = (TextView)findViewById(R.id.textView1);
        btnstart.setOnClickListener(this);
        btnstop.setOnClickListener(this);
        
        wm = (WifiManager)Menu.this.getSystemService(WIFI_SERVICE);
        
        if (wm.isWifiEnabled() == false)
         wm.setWifiEnabled(true);
        
        appsub.setText("WIFI Scanner");
    }
    
    @Override
 public void onClick(View v) {
     
  if (v.getId() == R.id.startWifi) {
   initWIFIScan();
  }
  
  if(v.getId() == R.id.stopWifi) {
   StopWIFI(); 
  }
   
 }
    
    
   //////////////////////////HTTP POST///////////////////////////////////////////
    
    String result =null;
    public void postData(String input) {
     HttpClient httpclient = new DefaultHttpClient();
     HttpPost httppost = new HttpPost("http://128.134.51.42:8888/ServletTest/BBSPostServlet");
     
     try{
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
      nameValuePairs.add(new BasicNameValuePair("name",input));
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
      System.out.println("33333333333");
      HttpResponse response = httpclient.execute(httppost);
      System.out.println("44444444444");
      HttpEntity entity = response.getEntity();
      InputStream is = entity.getContent();
      System.out.println("55555555555");
      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();
     }
    }
}   
 
   



 

오드아덴 (190 포인트) 님이 2013년 3월 18일 질문
서블릿 post 부분 소스 입니다. 한번에 같이 안올라 가네요
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("euc-kr");
        String name = request.getParameter("name");
//        String title = request.getParameter("time");
//        String content = request.getParameter("content");
        response.setContentType("text/html;charset=euc-kr");
        PrintWriter out = response.getWriter();
        out.println("<HTML>");
        out.println("<HEAD><TITLE>게시판 글쓰기 - 결과화면</TITLE></HEAD>");
        out.println("<BOFY>");
        out.printf("이름 : %s <BR>",name);
//        out.printf("제목 : %s <BR>",title);
        out.println("--------------------<br>");
//        out.printf("<PRE>%s</PRE>",content);
        out.println("--------------------<br>");
        out.println("저장되었습니다.");
        out.println("</BODY>");
        out.println("</HTML>");
       
    }
위의 안드로이드 소스에 대한 에러내용 입니다.
03-18 10:50:51.452: D/AudioManager(19446): playSoundEffect() : effectType = 0Request Package = ac.awst.findposition
03-18 10:50:51.452: I/ViewRootImpl(19446): ViewRoot's MotionEvent : Up
03-18 10:50:51.462: I/System.out(19446): 33333333333
03-18 10:50:51.482: W/dalvikvm(19446): threadid=1: thread exiting with uncaught exception (group=0x4206c438)
03-18 10:50:51.492: E/AndroidRuntime(19446): FATAL EXCEPTION: main
03-18 10:50:51.492: E/AndroidRuntime(19446): android.os.NetworkOnMainThreadException
03-18 10:50:51.492: E/AndroidRuntime(19446):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at libcore.io.IoBridge.connect(IoBridge.java:112)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at java.net.Socket.connect(Socket.java:832)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at ac.awst.findposition.Menu.postData(Menu.java:142)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at ac.awst.findposition.Menu.initWIFIScan(Menu.java:86)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at ac.awst.findposition.Menu.onClick(Menu.java:120)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at android.view.View.performClick(View.java:4114)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at android.view.View$PerformClick.run(View.java:17097)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at android.os.Handler.handleCallback(Handler.java:615)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at android.os.Looper.loop(Looper.java:137)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at android.app.ActivityThread.main(ActivityThread.java:4885)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at java.lang.reflect.Method.invokeNative(Native Method)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at java.lang.reflect.Method.invoke(Method.java:511)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
03-18 10:50:51.492: E/AndroidRuntime(19446):     at dalvik.system.NativeStart.main(Native Method)

1개의 답변

0 추천
 
채택된 답변
android.os.NetworkOnMainThreadException

 

메인 스레드에서 네트워크 작업을 해서 발생한 Exception 입니다.

네트워크 작업을 스레드로 따로 돌려주세요.

핸들러 + 스레드, 또는 AsyncTask, AsyncTaskLoader 등을 사용하시면 됩니다.
원조안드로이드 (58,190 포인트) 님이 2013년 3월 18일 답변
오드아덴님이 2013년 3월 18일 채택됨
네, 답변 감사합니다. 일단 도전!!!
...