Java Android:在HttpClient不工作的情况下,以字符串形式从网页获取HTML
我正在编写一个应用程序,它使用HttpClient连接到网页(目的是能够将网页的一些HTML复制到字符串中)。我尝试通过使用HttpClient连接来实现这一点。这是我使用的代码:Java Android:在HttpClient不工作的情况下,以字符串形式从网页获取HTML,java,javascript,android,httpclient,Java,Javascript,Android,Httpclient,我正在编写一个应用程序,它使用HttpClient连接到网页(目的是能够将网页的一些HTML复制到字符串中)。我尝试通过使用HttpClient连接来实现这一点。这是我使用的代码: public void getText() { final TextView contentView = (TextView) findViewById(R.id.textview); String url = "http://www.anandtech.com"; /* An instance
public void getText() {
final TextView contentView = (TextView) findViewById(R.id.textview);
String url = "http://www.anandtech.com";
/* An instance of this class will be registered as a JavaScript interface */
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
ResponseHandler<String> handler = new BasicResponseHandler();
try {
String response = client.execute(get, handler);
contentView.setText(response);
} catch (Exception e) {
// TODO Auto-generated catch block
contentView.setText(e.getMessage());
}
}
MainActivity.java
@抑制警告(“未使用”)
类和processContent()方法都是在活动的void onCreate方法FIY中定义的。在本例中,问题是javascript没有启动processContent()方法,因为。如果我尝试初始化任何其他javascript命令,例如document.write(),webview会做出反应,因此javascript不是问题所在。如果我尝试从脚本上的任何其他地方启动MyJavaScriptInterface和processContent()方法,它就可以正常工作。因此,在我看来,javascript在启动该方法时似乎遇到了问题(即使其他用户报告该方法可以工作)
有人能帮我使这两种方法中的任何一种起作用吗?
提前感谢这应该可以:
public class MainActivity extends Activity{
private TextView contentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(your layout);
contentView = (TextView) findViewById(R.id.textview);
DownloadTask task = new DownloadTask();
task.execute(url);
}
private class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... urls) {
HttpResponse response = null;
HttpGet httpGet = null;
HttpClient mHttpClient = null;
String s = "";
try {
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
httpGet = new HttpGet(urls[0]);
response = mHttpClient.execute(httpGet);
s = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return s;
}
@Override
protected void onPostExecute(String result){
contentView.setText(result);
}
}
}
公共类MainActivity扩展活动{
私有文本视图contentView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(您的布局);
contentView=(TextView)findViewById(R.id.TextView);
DownloadTask任务=新建DownloadTask();
task.execute(url);
}
私有类DownloadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
HttpResponse响应=null;
HttpGet-HttpGet=null;
HttpClient mHttpClient=null;
字符串s=“”;
试一试{
if(mHttpClient==null){
mHttpClient=新的DefaultHttpClient();
}
httpGet=新的httpGet(URL[0]);
response=mHttpClient.execute(httpGet);
s=EntityUtils.toString(response.getEntity(),“UTF-8”);
}捕获(IOE异常){
e、 printStackTrace();
}
返回s;
}
@凌驾
受保护的void onPostExecute(字符串结果){
contentView.setText(结果);
}
}
}
这应该可以:
public class MainActivity extends Activity{
private TextView contentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(your layout);
contentView = (TextView) findViewById(R.id.textview);
DownloadTask task = new DownloadTask();
task.execute(url);
}
private class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... urls) {
HttpResponse response = null;
HttpGet httpGet = null;
HttpClient mHttpClient = null;
String s = "";
try {
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
httpGet = new HttpGet(urls[0]);
response = mHttpClient.execute(httpGet);
s = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return s;
}
@Override
protected void onPostExecute(String result){
contentView.setText(result);
}
}
}
公共类MainActivity扩展活动{
私有文本视图contentView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(您的布局);
contentView=(TextView)findViewById(R.id.TextView);
DownloadTask任务=新建DownloadTask();
task.execute(url);
}
私有类DownloadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
HttpResponse响应=null;
HttpGet-HttpGet=null;
HttpClient mHttpClient=null;
字符串s=“”;
试一试{
if(mHttpClient==null){
mHttpClient=新的DefaultHttpClient();
}
httpGet=新的httpGet(URL[0]);
response=mHttpClient.execute(httpGet);
s=EntityUtils.toString(response.getEntity(),“UTF-8”);
}捕获(IOE异常){
e、 printStackTrace();
}
返回s;
}
@凌驾
受保护的void onPostExecute(字符串结果){
contentView.setText(结果);
}
}
}
该类是否可以是OnCreate方法中的本地类?或者它必须位于单独的.java文件中?另外,Eclipse说“受保护的文档doInBackground()”与AsyncTask.doInBackground不兼容”没关系,我让它工作了。。。。但奇怪的是。。。。它似乎只得到了标记Nevermind。。。。非常感谢,顺便说一句,我在任何地方都找不到一个有效的方法。它返回所有东西,包括javaScript,我们如何修改这个技巧来只获取HTML。谢谢。这个类可以是OnCreate方法中的本地类吗?或者它必须位于单独的.java文件中?另外,Eclipse说“受保护的文档doInBackground()”与AsyncTask.doInBackground不兼容”没关系,我让它工作了。。。。但奇怪的是。。。。它似乎只得到了标记Nevermind。。。。非常感谢,顺便说一句,我在任何地方都找不到一个有效的方法。它返回所有东西,包括javaScript,我们如何修改这个技巧来只获取HTML。谢谢
public class MainActivity extends Activity{
private TextView contentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(your layout);
contentView = (TextView) findViewById(R.id.textview);
DownloadTask task = new DownloadTask();
task.execute(url);
}
private class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... urls) {
HttpResponse response = null;
HttpGet httpGet = null;
HttpClient mHttpClient = null;
String s = "";
try {
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
httpGet = new HttpGet(urls[0]);
response = mHttpClient.execute(httpGet);
s = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return s;
}
@Override
protected void onPostExecute(String result){
contentView.setText(result);
}
}
}