我正在尝试获取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);
}
};
}
答案 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中以防止这种情况发生。