프로그래밍/안드로이드

안드로이드 new OutputStreamWriter(http.getOutputStream(), "EUC-KR") 에서 에러 해결법

가카리 2013. 11. 19. 14:35
반응형
예제 코드 보면서 하고 있는데요

URL을 제가 APMsetup으로 구축한 서버로 바꾸면 에러는 안뜨는데 

어플이 죽지도 않고 반응을 안하네요 

로그 찍어보니깐 

OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR"); 

이부분에서 에러나는데 혹시 왜 그러는지 아시는분 있나요??

전체코든느

package com.example.hello;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.TabActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends TabActivity { 
    // 전역변수를 선언한다 
    TabHost mTabHost = null; 
    String myId, myPWord, myTitle, mySubject, myResult; 
  
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        mTabHost = getTabHost();          // Tab 만들기 
        mTabHost.addTab(mTabHost.newTabSpec("tab_1").setIndicator("서버로 전송").setContent(R.id.page01)); 
        mTabHost.addTab(mTabHost.newTabSpec("tab_2").setIndicator("서버에서 받음").setContent(R.id.page02)); 
        findViewById(R.id.button_submit).setOnClickListener(buttonClick);  
    } 
    
    //------------------------------ 
    //    button Click 
    //------------------------------ 
    Button.OnClickListener buttonClick = new Button.OnClickListener() { 
        public void onClick(View v) { 
           // 사용자가 입력한 내용을 전역변수에 저장한다 
           myId = ((EditText)(findViewById(R.id.edit_Id))).getText().toString();  
           myPWord = ((EditText)(findViewById(R.id.edit_pword))).getText().toString();  
           myTitle = ((EditText)(findViewById(R.id.edit_title))).getText().toString();  
           mySubject = ((EditText)(findViewById(R.id.edit_subject))).getText().toString();  
    
           HttpPostData();   // 서버와 자료 주고받기 
       } 
    };  
    
    //------------------------------ 
    //   Http Post로 주고 받기 
    //------------------------------ 
    public void HttpPostData() { 
         try { 
              //-------------------------- 
              //   URL 설정하고 접속하기 
              //-------------------------- 
         URL url = new URL("http://localhost/first.php);    
            //  URL url = new URL("http://korea-com.org/foxmann/lesson01.php);       // URL 설정 
              HttpURLConnection http = (HttpURLConnection) url.openConnection();   // 접속 
              //-------------------------- 
              //   전송 모드 설정 - 기본적인 설정이다 
              //-------------------------- 
              http.setDefaultUseCaches(false);                                            
              http.setDoInput(true);                         // 서버에서 읽기 모드 지정 
              http.setDoOutput(true);                       // 서버로 쓰기 모드 지정  
              http.setRequestMethod("POST");         // 전송 방식은 POST 
              // 서버에게 웹에서 <Form>으로 값이 넘어온 것과 같은 방식으로 처리하라는 걸 알려준다 
              http.setRequestProperty("content-type", "application/x-www-form-urlencoded"); 
              //-------------------------- 
              //   서버로 값 전송 
              //-------------------------- 
              StringBuffer buffer = new StringBuffer(); 
              
              buffer.append("id").append("=").append(myId).append("&");   
              // php 변수에 값 대입 
              buffer.append("pword").append("=").append(myPWord).append("&");   // php 변수 앞에 '$' 붙이지 않는다 
              buffer.append("title").append("=").append(myTitle).append("&");           // 변수 구분은 '&' 사용  
              buffer.append("subject").append("=").append(mySubject); 
              
              OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR"); 
              Log.d("check", "1" + myId);
              PrintWriter writer = new PrintWriter(outStream); 
              Log.d("check", "2");
              writer.write(buffer.toString()); 
              writer.flush(); 
              Log.d("check", "3");
              //-------------------------- 
              //   서버에서 전송받기 
              //-------------------------- 
              
              InputStreamReader tmp = new InputStreamReader(http.getInputStream(), "EUC-KR");  
              BufferedReader reader = new BufferedReader(tmp); 
              StringBuilder builder = new StringBuilder(); 
              String str; 
              
              while ((str = reader.readLine()) != null) {       // 서버에서 라인단위로 보내줄 것이므로 라인단위로 읽는다 
                   builder.append(str + "\n");                     // View에 표시하기 위해 라인 구분자 추가 
              } 
              myResult = builder.toString();                       // 전송결과를 전역 변수에 저장 
              Log.d("check", "Stirng" + myResult);
             ((TextView)(findViewById(R.id.text_result))).setText(myResult); 
             Toast.makeText(MainActivity.this, "전송 후 결과 받음", 0).show(); 
         } catch (MalformedURLException e) { 
                // 
         } catch (IOException e) { 
                //  
         } // try 
    } // HttpPostData 
} // Activity 


이고요 

php 파일은 

<?
// 변수 내용 확인
//if ($id == "") 
$id = $_POST["id"]; 
//if ($pword == "") 
$pword = $_POST["pword"];
//if ($title == "") 
$title = $_POST["title"];
//if ($subject == "") 
$subject = $_POST["subject"];
// 변수 내용 출력
echo ("
  님께서 PHP로 전송한 내용입니다
  -----------------------------------------------------------------\r\n
  사용자 ID : $id \r\n
  비밀번호 : $pword \r\n
  개념 : $title \r\n
  대책 : $subject \r\n
  -----------------------------------------------------------------\r\n
  축하드립니다. lesson01.php 를 정삭적으로 호출하셨습니다!
");
?>
입니다 부탁드리겠습니
 
2012.12.26 17:48:15
이라슈

에이.. 설마 url을 localhost로 적어놓고 안된다고 하시는건 아니겠죠?


저거 소스 그대로 돌리는건 아니겠죠?

 
2012.12.27 09:23:01
후룰룰루

그럼 어떠한 방식으로 접근해야 하는지 알수 있을까요??


제컴에서 localhost로의 접근은 되는데 폰에서 하려면 어떤식으로 해야하나요? ㅠㅠ

한번도 이런부분안해봐서 난감하네요 도움 부탁드룡 ~ 
 
2012.12.27 09:27:44
이라슈

헐.. 먼저 localhost라는 것은 루프백 ip주소(127.0.0.1)를 대신할수있는 상수라고 보시면 됩니다.


그렇기 때문에 다른 컴퓨터에 접근할때 localhost를 쓰면 당연히 접근할수 없게 되겠죠.


localhost대신 대상 컴퓨터의 ip주소와 port번호를 적어주시면 됩니다.


ip주소와 port번호 확인법은 검색해보시는것이 더 빠를거라 생각되구요.


ip주소와 port번호를 사용한 주소는 대략 이런 식입니다. 


http://192.168.0.1:8080/aaa.php 

댓글
2012.12.27 10:14:14
후룰룰루

감사합니다 ~ 해결했습니다 ㅠㅠ

 

반응형