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

안드로이드에서 http parsing으로 text파일을 읽어들이려고 하는데요.

0 추천

오류도 뜨지 않고 텍스트파일을 불러들이지 못하네요.

초심자다보니 코드의 어떤부분이 잘못됬는지 알아내기도 힘들어서 이렇게 여기에 글 올립니다.

코드 한 번 봐주시고 조언 부탁드립니다. 정말 이거가지고 몇시간째 잡고있는지 모르겠어요ㅜㅠ

package com.example.avb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

 TextView tv;

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

 private void parseTextFile() {
  // TODO Auto-generated method stub
  new Thread(new Runnable() {

   @Override
   public void run() {
    // TODO Auto-generated method stub
    tv = (TextView) findViewById(R.id.text);
    String txtpath = "http://www.urlOfThePageYouWantToRead.nl/text.txt";
    HttpClient httpClient = new DefaultHttpClient();
    HttpGet getRequest = new HttpGet(txtpath);

    try {
     HttpResponse httpResponse = httpClient.execute(getRequest);
     if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {

     } else {
      InputStream inputStream = httpResponse.getEntity()
        .getContent();
      BufferedReader bufferedReader = new BufferedReader(
        new InputStreamReader(inputStream));
      StringBuilder total = new StringBuilder();
      String line;
      String a;
      while ((line = bufferedReader.readLine()) != null) {
       total.append(line + "\n");

      }
      inputStream.close();
      a = total.toString();
      tv.setText(a);
     }
    } catch (ClientProtocolException e) {
     // TODO: handle exception
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }

   }
  }).start();

 }

}

 

wonie86 (300 포인트) 님이 2013년 6월 3일 질문

2개의 답변

0 추천
음... 디버깅을 해보시면 쉽게 알 수 있으실텐데요...

대충 본 걸로는 setText에서 오류가 날것 같네요.
안티푸라면 (6,700 포인트) 님이 2013년 6월 3일 답변
어떤식으로 코드를 수정해야될지 감이 잡히질 않습니다. 구체적으로 어떻게 해야할지 알려주시면 안될까요? 염치불구하고 부탁드립니다.
디버깅을 못한다면
http://www.androidpub.com/764
이글을 보고 공부하세요.

말대로 setText에서 "only the original thread that created a view hierarchy" 관련 예외가 발생한다면 구글에서 검색을 해보세요.
0 추천
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
   .permitAll().build();
  StrictMode.setThreadPolicy(policy);
  
  final EditText display = (EditText)findViewById(R.id.display);
  
  View button = findViewById(R.id.button);
  button.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    
    StringBuffer sb = new StringBuffer();
    
    try {
     URL url = new URL("주소입력");
     
     BufferedReader reader = new BufferedReader(
        new InputStreamReader(url.openStream()));
     
     String str = null;
     while((str = reader.readLine()) != null){
      sb.append(str);
     }
     
     display.setText(sb.toString());
    
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    
   }
  });
 }
}

 

웹상의 txt파일 읽어오는 간단한 코드 작성했습니다. 구지 쓰레드에서 저걸 돌려야하는 이유가 있으신건지?

텍스트뷰는 onCreate에서 해주셔야 되지 않을까 생각합니다.

단순히 txt 파일을 뷰에 표시해주시는 거라면 쓰레드로 구성을 안하셔도 무관합니다.

도움이 되셨으면 좋겠네요.
안드로메다개발자 (8,830 포인트) 님이 2013년 6월 3일 답변
안드로메다개발자님이 2013년 6월 3일 수정
...