我正在尝试获取网页内容
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.google.com");
HttpResponse response = client.execute(request);
“client.execute(request)”被标记为错误,“未处理的异常类型ClientProtocolException” 如何解决这个问题?
编辑
使用Try Catch
try{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.google.com");
HttpResponse response = client.execute(request);
}catch(Exception e){
//Handle Error here
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
dlgAlert.setMessage("OK OK");
dlgAlert.setTitle("OK");
dlgAlert.setPositiveButton("OK", null);
dlgAlert.setCancelable(true);
dlgAlert.create().show();
}
并运行应用程序,显示警报
互联网连接存在。
添加到androidmanifest.xml的网络使用权限
EDIT 我想获得一个网页内容,我按照教程和previuos问题,我尝试的所有代码都失败了。 完整代码:
package com.example.internetsql;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void connect(View view)
{
try{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.google.com");
HttpResponse response = client.execute(request);
}catch(Exception e){
//Handle Error here
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
dlgAlert.setMessage("OK OK");
dlgAlert.setTitle("OK");
dlgAlert.setPositiveButton("OK", null);
dlgAlert.setCancelable(true);
dlgAlert.create().show();
}
}
}
答案 0 :(得分:0)
您需要使用try / catch块包围代码,或者将throws声明添加到调用它的任何方法中。
答案 1 :(得分:0)
您需要从正在执行此方法的方法中抛出ClientProtocolException。或者用try,catch块来围绕它来处理方法本身的预期。
try
{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.google.com");
HttpResponse response = client.execute(request);
}
catch (ClientProtocolException cpe)
{
e.printStackTrace();
}
这比捕获一般异常更好,因为你会捕获你可能合理期望获得的异常,但你不会意外地错过你没想到的异常。 (这可能表示代码中存在错误或者您没想到的错误)。
编辑: Android的设置方式不允许您在UI线程中执行可能长时间运行的任务。访问网页通常应该在另一个线程中进行。您将需要研究如何使用AsyncTask。
在此期间,将此代码放在onCreate方法的开头,应暂时解决问题。
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
我强烈建议您在开始尝试在UI线程中执行太多操作之前,先了解如何使用AsyncTask进行Internet访问。这可能在模拟器甚至是连接到Wifi的设备上运行得相当好,但是一旦你进行稍慢的移动连接,你的UI就会在请求运行时变得没有响应。