Java Android:在HttpClient不工作的情况下,以字符串形式从网页获取HTML

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

我正在编写一个应用程序,它使用HttpClient连接到网页(目的是能够将网页的一些HTML复制到字符串中)。我尝试通过使用HttpClient连接来实现这一点。这是我使用的代码:

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);

            }
        }
}