2014-09-27 143 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!"; 
    } 
} 

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

0

这对WebView有什么影响?你有一个NetworkOnMainThreadExeption。你必须把你的代码放在AsyncTask或Thread中来防止这种情况发生。