我在使用Android Studio连接到服务器以读取文件txt时遇到问题。
然后,我使用AsyncTask,但是问题是当我打开应用程序并尝试使用该函数时,它给了我错误。
这是代码:
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
URL url = null;
try {
url = new URL("http://tmtsite.altervista.org/Agata/in.txt");
} catch (MalformedURLException e) {
e.printStackTrace();
}
URLConnection conn = null;
try {
conn = url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader rd = null;
try {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
String line = "";
StringBuilder builder = new StringBuilder(16384);
try {
while ((line = rd.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
}
这是堆栈跟踪:
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: Process: damasoft.agata, PID: 22354
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.java:309)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.lookupHostByName(InetAddress.java:464)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.getAllByName(InetAddress.java:215)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:220)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:176)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:108)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:482)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:465)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:447)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:468)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at damasoft.agata.MainActivity$LongOperation.doInBackground(MainActivity.java:111)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at damasoft.agata.MainActivity$LongOperation.doInBackground(MainActivity.java:95)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at
android.os.AsyncTask$2.call(AsyncTask.java:295)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at libcore.io.Posix.android_getaddrinfo(Native Method)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.lookupHostByName(InetAddress.java:451)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.getAllByName(InetAddress.java:215)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:220)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:176)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:108)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:482)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:465)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:447)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:468)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at damasoft.agata.MainActivity$LongOperation.doInBackground(MainActivity.java:111)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at damasoft.agata.MainActivity$LongOperation.doInBackground(MainActivity.java:95)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:295)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at libcore.io.Posix.android_getaddrinfo(Native Method)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.lookupHostByName(InetAddress.java:451)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.net.InetAddress.getAllByName(InetAddress.java:215)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:220)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:176)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:108)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:482)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:465)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:447)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:468)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at damasoft.agata.MainActivity$LongOperation.doInBackground(MainActivity.java:111)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at damasoft.agata.MainActivity$LongOperation.doInBackground(MainActivity.java:95)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:295)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
06-28 11:12:52.761 22354-22567/damasoft.agata E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
最佳答案
正如Logcat所说
引起原因:java.lang.SecurityException:权限被拒绝(丢失
INTERNET权限?)
确保在清单文件中定义了Internet
权限。
用这个
<uses-permission android:name="android.permission.INTERNET"/>
因此您的
manifest.xml
文件如下所示<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.project">
<uses-permission android:name="android.permission.INTERNET"/>