【问题标题】:Get website source code from WebView从 WebView 获取网站源代码
【发布时间】:2014-09-27 14:58:50
【问题描述】:

我正在尝试获取 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);

 }

};


}

【问题讨论】:

    标签: android html css webview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      除了在您的主线程上进行网络工作(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)

      【讨论】:

        猜你喜欢
        • 2017-12-24
        • 2018-01-29
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 2012-11-28
        • 2015-12-22
        • 1970-01-01
        • 2023-02-14
        相关资源
        最近更新 更多