2014-09-27 2 views
0

Я пытаюсь получить HTML-источник, но это замораживание приложения. Я не знаю, в чем проблема, и я добавил интернет-разрешение Я взял этот код с сайта, но он не работает со мной. Он работает, пока я не нажму кнопку, а затем он просто зависает.Получить исходный код веб-сайта из WebView

Я надеюсь, что кто-то может мне помочь с этим, вот код, я использую:

public class MainActivity extends Activity { 

    private String HTML = ""; 
    EditText tv; 
    private ProgressDialog m_ProgressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    Button btn = (Button)findViewById(R.id.button1); 
    tv = (EditText)findViewById(R.id.editText1); 
    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      getHTML("http://m.Facebook.com/"); 
     } 
    }); 
} 

public void getHTML(String paramString) 
{ 
    try 
    { 
    BufferedInputStream localBufferedInputStream = new BufferedInputStream(new URL(paramString).openConnection().getInputStream()); 
    ByteArrayBuffer localByteArrayBuffer = new ByteArrayBuffer(50); 
    while (true) 
    { 
     int i = localBufferedInputStream.read(); 
     if (i == -1) 
     { 
     HTML = new String(localByteArrayBuffer.toByteArray()); 
     handler.sendEmptyMessage(0); 
     return; 
     } 
     i = (byte)i; 
     localByteArrayBuffer.append(i); 

    } 
    } 
    catch (Exception localException) 
    { 
    while (true) 
     this.HTML = "Error!"; 
    } 
} 


private Handler handler = new Handler() 

{ 
    public void handleMessage(Message paramMessage) 
{ 

    EditText localEditText = (EditText)MainActivity.this.findViewById(R.id.editText1); 

    MainActivity.this.m_ProgressDialog.dismiss(); 

    localEditText.setText(MainActivity.this.HTML); 

} 

}; 


} 

ответ

0

В дополнение к выполнению сетевой работы на основном потоке (большой нет-нет в Android - использование AsyncTask), ваша ошибка, вероятно, происходит здесь:

public void getHTML(String paramString) { 
    try { 
     BufferedInputStream localBufferedInputStream = new BufferedInputStream(new URL(paramString).openConnection().getInputStream()); 
     ByteArrayBuffer localByteArrayBuffer = new ByteArrayBuffer(50); 
     while (true) { 
      int i = localBufferedInputStream.read(); 
      if (i == -1) { 
       HTML = new String(localByteArrayBuffer.toByteArray()); 
       handler.sendEmptyMessage(0); 
       return; 
      } 
      i = (byte) i; 
      localByteArrayBuffer.append(i); 

     } 
    } catch (Exception localException) { 
     while (true) // <<< this will create an infinite loop when an error occurs 
      this.HTML = "Error!"; 
    } 
} 

Попробуйте удалить while (true) из вашего улова заявления.

0

Для чего это необходимо для работы с WebView? У вас есть NetworkOnMainThreadExeption. Вы должны поместить свой код в AsyncTask или Thread, чтобы предотвратить это.

Смежные вопросы