【问题标题】:Not displayed html in android在android中不显示html
【发布时间】:2015-08-09 06:44:25
【问题描述】:

试图将页面的html代码推送到变量中并显示出来,但是这段代码的性能:

private class SearchTask extends AsyncTask<String, Void, String> {

String http = "";

@Override
protected String doInBackground(String... params) {
    StringBuilder builder = new StringBuilder(16384);

    DefaultHttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet("https://www.google.com.ua/");

    try {
        HttpResponse responce = client.execute(get);
        InputStream content = responce.getEntity().getContent();

        BufferedReader reader = new BufferedReader(new InputStreamReader(content));
        while ((http = reader.readLine()) != null) {
            builder.append(http);
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return builder.toString();
}

@Override
protected void onPostExecute(String s) {
    editTxt.setText(s);

}

} 苍蝇错误和应用程序崩溃。

我无法理解问题所在。访问互联网的授权在宣言中给出。告诉我出了什么事?也许有更简单的方法可以做到这一点?

日志猫:

08-08 16:54:25.030  23105-23236/com.example.ron.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #3
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
        at java.util.concurrent.FutureTask.run(FutureTask.java:239)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:838)
 Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:430)
        at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
        at java.net.InetAddress.getAllByName(InetAddress.java:214)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
        at com.example.ron.myapplication.MainActivity$SearchTask.doInBackground(MainActivity.java:93)
        at com.example.ron.myapplication.MainActivity$SearchTask.doInBackground(MainActivity.java:80)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
        at libcore.io.Posix.getaddrinfo(Native Method)
        at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:59)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 
Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)

【问题讨论】:

  • 使用 LogCat 检查与您的崩溃相关的 Java 堆栈跟踪:stackoverflow.com/questions/23353173/… 另请注意,HttpClient 在 Android 5.1 中已被弃用,并且已从 M Developer Preview 中的 SDK 中删除。请考虑使用其他 HTTP 选项,例如 OkHttp。

标签: android html parsing


【解决方案1】:

尚未在 AndroidManifest 中声明 Internet 权限。查看您的 doInBackGround,您缺少一些东西...

【讨论】:

    【解决方案2】:

    AndroidManifest.xml文件中,你应该添加

    <uses-permission android:name="android.permission.INTERNET" />
    

    它在AndroidManifest.xml 中的位置如下所示:

    <manifest xlmns:android...>
     ...
     <uses-permission android:name="android.permission.INTERNET" />
    
     <application ...
    
    </manifest>
    

    更新:如果已经设置权限,你是在 AVD 还是真手机上运行?如果是 AVD,请检查您的 PC 中的网络连接是否可以访问 Internet,或者先尝试在 Web 浏览器中打开该 Url(在真实手机中执行相同操作)。

    【讨论】:

    • 清单中给出了访问 Internet 的授权
    • 你是在 AVD 还是真手机上运行的?如果是 AVD,请检查您的 PC 中的网络连接是否可以访问 Internet,或者尝试先在 Web 浏览器中打开该 URL(在真实手机中执行相同操作)。
    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2017-02-28
    • 2013-01-02
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多