问题描述
我正在尝试此代码,该代码应在Logcat中显示某些网站的html代码。
但是我只是得到
Using Network Security Config from resource network_security_config debugBuild: true
和
java.net.UnknownHostException: Unable to resolve host "www.google.co.in": No address associated with hostname
我的互联网连接处于活动状态。我正在关注一个android教程,那个家伙做了同样的事情并得到了结果。(他使用的是旧版的android studio
java代码
package com.example.newapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;
public class MainActivity extends AppCompatActivity {
public static class DownloadTask extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... urls) {
String result= "";
URL url;
HttpURLConnection urlConnection= null;
try{
url= new URL(urls[0]);
urlConnection=(HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader= new InputStreamReader(in);
int data = reader.read();
while (data != -1)
{
char current = (char)data;
result+= current;
data= reader.read();
}
return result;
}
catch (Exception e)
{
e.printStackTrace();
return "failed";
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask task= new DownloadTask();
String result = null;
try {
result= task.execute("https://www.google.co.in//").get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("Contents of URL",result);
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.newapp">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config" >
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
解决方法
通过将最小api更改为28,解决了我的问题,因为您必须将仿真器的api保持大于28(可以通过AVD管理器完成),然后转到“文件”>“项目结构”>“模块”。然后转到顶部的“默认配置”,将Min SDK版本更改为28。(您也可以尝试在Gradle脚本(在屏幕左侧的应用程序下方)中将其更改:>-build.app(Module:app)找到minSdkVersion,只需在此处进行更改即可。