从WebView获取网站源代码

时间:2014-09-27 14:58:50

标签: android html css webview

我正在尝试获取HTML源代码,但它正在冻结应用程序。 我不知道问题是什么,我添加了Internet权限 我从一个网站上获取了这段代码,但它并没有与我合作。它一直工作,直到我按下按钮然后它就冻结了。

我希望有人可以帮助我,这是我正在使用的代码:

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);

 }

};


}

2 个答案:

答案 0 :(得分: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!";
    }
}

尝试从catch语句中删除while (true)

答案 1 :(得分:0)

使用WebView有什么用?你有一个NetworkOnMainThreadExeption。您必须将代码放在AsyncTask或Thread中以防止这种情况发生。