2013-07-05 3 views
0

저는 매우 안드로이드 개발에 새로운입니다, 이것은 나의 첫날입니다. 내가 얻는 오류 메시지를 이해할 수 없기 때문에 내 코드의 문제점을 이해하는 데 문제가 있습니다. 나는 일어나고있는 일에 대해 밝히기 위해 somoene을 찾고 있습니다.안드로이드 http 요청이 끔찍하게 잘못되었습니다.

url을 사용하여 HTTP 요청을 보내려고합니다. 본문을 텍스트로 추출하여 텍스트로 채워진 응답을 받아야하며,이 본문을 String으로 추출하여 Android 텍스트를 통해 음성으로 보내야합니다. 또한 상기 페이지의 웹뷰를 디스플레이한다.

는 여기있다 :

package com.example.webview; 

import java.io.IOException; 
import java.net.URI; 
import java.net.URISyntaxException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.ParseException; 
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 org.apache.http.util.EntityUtils; 

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.EditText; 
import android.widget.Toast; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 

public class MainActivity extends Activity implements TextToSpeech.OnInitListener{ 

    private WebView mWebview ; 
    EditText txtText; 
    TextToSpeech tts = new TextToSpeech(this, (OnInitListener) this); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     mWebview = new WebView(this); 

     mWebview.getSettings().setJavaScriptEnabled(true); // enables javascript 

     final Activity activity = this; 

     mWebview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     mWebview .loadUrl("http://www.androidhive.info/2012/01/android-text-to-speech-tutorial/"); 
     setContentView(mWebview); 
     try { 
      speakOut(getText("http://www.androidhive.info/2012/01/android-text-to-speech-tutorial/")); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    public void speakOut(String text) { 
     tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
    } 

    public String getText(String webPage) throws ParseException, IOException{ 
     HttpResponse response = null; 
     try {   
       HttpClient client = new DefaultHttpClient(); 
       HttpGet request = new HttpGet(); 
       request.setURI(new URI("http://supersecretwebsite.net:8080/" + "http://www.androidhive.info/2012/01/android-text-to-speech-tutorial/")); 
       response = client.execute(request); 
      } catch (URISyntaxException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     String responseBody = "No text found on webpage."; 
     int responseCode = response.getStatusLine().getStatusCode(); 
     switch(responseCode) { 
     case 200: 
     HttpEntity entity = response.getEntity(); 
      if(entity != null) { 
       responseBody = EntityUtils.toString(entity); 
      } 
     } 
     return responseBody; 
    } 


    @Override 
    public void onInit(int status) { 
     // TODO Auto-generated method stub 

    } 

} 

오류 :

음 꽤 많이있다.

으로 시작합니다.
(Application)com.example.webview (Tag)Trace (Text)Error opening trace file: No such file or directory (2) 

모든 것이 종료 된 것처럼 보입니다. 프로그램이 실행되지 않습니다. 기본 웹 뷰가 있었지만 다른 어떤 것도 완벽하게 작동하지 않았기 때문에 추가 된 Httprequest 나 텍스트가 이러한 오류의 원인 일 가능성이 높습니다. 그러나 솔직히 어떻게, 무엇을, 또는 왜 말할 수는 없습니다.

+2

'새 URI ("http://supersecretwebsite.net:8080/"+ "http://www.androidhive.info/2012/01/android-text-to-speech-tutorial/") .. 유효한 URL이 아닙니다. –

+1

게시 한 메시지가 관련성이 없거나 적어도 즉시 오류와 관련이 없을 수 있습니다. Android에 대해 알아야 할 첫 번째 사항 중 하나는 오류 및 경고 메시지가 많이 발생한다는 것입니다. 실제 문제에 대한 단서를 찾으려면 전체 로그를 살펴 봐야합니다. 즉, Brian이 위에서 확인한 것 이상의 문제입니다. –

답변

1

다른 스레드에서 네트워킹이 필요합니다. 비동기 태스크를 사용하여이를 수행하십시오. 그런 다음 OnPostExecute() 메서드에서 결과를 표시 할 수 있습니다.

또한 매니페스트에서 인터넷 사용 권한을 선언해야합니다.

관련 문제