我是android编程的业余爱好者 . 我正在使用Jsoup从网站获取html并将其放入textview但我收到错误 . 我怎样才能解决这个问题?
My code:
package com.example.hashtag.asdasd;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
Document siteDoc;
String a;
Elements p;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn= (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new siteGetter().execute();
}
});
}
private class siteGetter extends AsyncTask < Void, Void, String>{
@Override
protected String doInBackground(Void... voids) {
try {
siteDoc = Jsoup.connect("http://hashtagedu.ir").get();
} catch (IOException ex) {
ex.printStackTrace();
}
return null;
}
}
public void displaydata(){
p = siteDoc.getElementsByTag("p");
a=p.text();
TextView tv= (TextView) findViewById(R.id.textView);
tv.setText(a);
}
}
My Errors:
java.lang.RuntimeException:在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)上的android.os.AsyncTask $ 3.done(AsyncTask.java:309)上执行doInBackground()时发生错误.util.concurrent.FutureTask.setException(FutureTask.java:223)at java.util.concurrent.FutureTask.run(FutureTask.java:242)at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588)at java.lang.Thread.run(Thread.java:818) )引起:java.lang.SecurityException:在java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)的java.net.InetAddress.lookupHostByName(InetAddress.java:464)上的权限被拒绝(缺少INTERNET权限?) .net.InetAddress.getAllByName(InetAddress.java:215)at com.android.okhttp.internal.Network $ 1.resolveInetAddresses(Network.java:29)at com.android.okhttp.internal.http.Route Selector.resetNextInetSocketAddress(RouteSelector.java:188)在com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)在com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java: 100)com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)com.android.okhttp的com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) .internal.http.HttpEngine.connect(HttpEngine.java:330)at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:437)在com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)在org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:563)的组织 . jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:540)org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)atg.jsoup.helper.HttpConnectio n.get(HttpConnection.java:216)在com.example.hashtag.asdasd.MainActivity $ siteGetter.doInBackground(MainActivity.java:46)在com.example.hashtag.asdasd.MainActivity $ siteGetter.doInBackground(MainActivity.java: 39)在android.os.AsyncTask $ 2.call(AsyncTask.java:295)at java.util.concurrent.FutureTask.run(FutureTask.java:237)at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java) :234)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588)at java.lang.Thread.run(Thread . java:818)引起:android.system.GaiException:android_getaddrinfo失败:在libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)的libcore.io.Posix.android_getaddrinfo(Native Method)中,EAI_NODATA(没有与主机名关联的地址) )java.net.InetAddress.getAllByName(InetAddress.java:451)at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)at java.net.InetAddress.getAllByName( InetAddress.java:215)com.android.okhttp.internal.Network $ 1.resolveInetAddresses(Network.java:29)at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)at com . android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)位于com.android.okhttp.internal.http的com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) . HttpEngine.createNextConnection(HttpEngine.java:357)在com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)在com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java: 330)在com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)在com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437)在com.android.okhttp .internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:563)at org.jsoup.helper.HttpConnection $ R esponse.execute(HttpConnection.java:540)atg.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)atg.jsoup.helper.HttpConnection.get(HttpConnection.java:216)at com.example.hashtag .asdasd.MainActivity $ siteGetter.doInBackground(MainActivity.java:46)在com.example.hashtag.asdasd.MainActivity $ siteGetter.doInBackground(MainActivity.java:39)在android.os.AsyncTask $ 2.call(AsyncTask.java: 295)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor)的android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234)的java.util.concurrent.FutureTask.run(FutureTask.java:237) . java:1113)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588)at java.lang.Thread.run(Thread.java:818)引起:android.system.ErrnoException:android_getaddrinfo失败:在java.net.InetAddress的libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)上的libcore.io.Posix.android_getaddrinfo(本地方法)中的EACCES(权限被拒绝) .lookupHostByName(InetAddress.java:451)at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)at java.net.InetAddress.getAllByName(InetAddress.java:215)at com.android.okhttp.internal.Network $ 1 .resolveInetAddresses(Network.java:29)位于com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)的com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) )com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)位于com.android.okhttp的com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)中的com.android.okhttp.internal.http.RouteSelector.next . internal.http.HttpEngine.nextConnection(HttpEngine.java:340)at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)at at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)位于com.android.okhttp.internal的com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437) . huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:563)at org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:540) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)atg.jsoup.helper.HttpConnection.get(HttpConnection.java:216)at com.example.hashtag.asdasd.MainActivity $ siteGetter.doInBackground(MainActivity) .java:46)at com.example.hashtag.asdasd.MainActivity $ siteGetter.doInBackground(MainActivity.java:39)at android.os.AsyncTask $ 2.call(AsyncTask.java:295)at java.util.concurrent.FutureTask .run(FutureTask.java:237)在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)at at Java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588)at java.lang.Thread.run(Thread.java:818)
2 回答
您必须为清单添加Internet权限 .
除了设置权限
<uses-permission android:name="android.permission.INTERNET" />
之外,您当前不会调用displaydata()
,如果您从后台任务执行此操作,则应设置一个处理程序来调用ui线程上的更改:关于将下载的图像(在删除的问题中提出)添加到ImageView(假设id为
R.id.imageView
)