【发布时间】:2018-09-06 01:12:40
【问题描述】:
所以我正在尝试从 REST API 读取 JSON;但是,在尝试使用 Scanner 读取 JSON 时,我不断收到 IOException。
目标是从 API 中读取所有 JSON,并将其输出到 Logcat。
运行调试器后,在“InputStream inputStream = conn.getInputStream();”处抛出异常
“IsConnected”也返回为假,所以我想知道这是否也可能是防火墙问题;但是,我认为情况并非如此。
我需要使用 API25 或更高版本。
我在做什么明显的错误?
我是一名学生,我更喜欢简单的解释,而不仅仅是快速修复代码!谢谢!
编辑: 在代码下方添加了 stackTrace。
import android.app.Activity;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
import javax.net.ssl.HttpsURLConnection;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(isConnected()) {
Log.i("Status", "Connected");
WebAsyncTask task = new WebAsyncTask();
task.execute("http://services.groupkt.com/country/get/all");
}else {
Log.i("Status", "Not Connected");
}
}
public boolean isConnected(){
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected())
return true;
else
return false;
}
}
class WebAsyncTask extends AsyncTask<String,String,Void>{
@Override
protected Void doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
// Log.i("URL",url.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inputStream = conn.getInputStream();
Scanner scanner = new Scanner(inputStream);
StringBuilder builder = new StringBuilder();
while(scanner.hasNext()){
builder.append(scanner.nextLine());
}
String data = builder.toString();
Gson gson = new Gson();
Message[] msg = gson.fromJson(data,Message[].class);
for (int i=1;i<msg.length;i++){
// publishProgress(msg[i].getMessage()+"\n");
Log.i("values", msg[i].getMessage()+"\n");
}
}catch(MalformedURLException e){
e.printStackTrace();
publishProgress("URL PROBLEM");
}catch (IOException e){
e.printStackTrace();
publishProgress("Input Problem");
}
return null;
}
@Override
protected void onProgressUpdate(String... values){
super.onProgressUpdate();
Log.i("values", values[0]+"\n");
}
}
class Message{
int status;
String message;
int junk;
public int getStatus() {
return status;
}
public String getMessage() {
return message;
}
public int getJunk() {
return junk;
}
}
03-27 10:53:46.733 31032-31047/? W/System.err: java.net.UnknownHostException: Unable to resolve host "services.groupkt.com": No address associated with hostname
03-27 10:53:46.734 31032-31047/? W/System.err: at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:125)
03-27 10:53:46.734 31032-31047/? W/System.err: at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
03-27 10:53:46.734 31032-31047/? W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:752)
03-27 10:53:46.735 31032-31047/? W/System.err: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
03-27 10:53:46.735 31032-31047/? W/System.err: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
03-27 10:53:46.735 31032-31047/? W/System.err: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
03-27 10:53:46.735 31032-31047/? W/System.err: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
03-27 10:53:46.735 31032-31047/? W/System.err: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345)
03-27 10:53:46.735 31032-31047/? W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
03-27 10:53:46.735 31032-31047/? W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
03-27 10:53:46.736 31032-31047/? W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
03-27 10:53:46.736 31032-31047/? W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
03-27 10:53:46.736 31032-31047/? W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243)
03-27 10:53:46.737 31032-31047/? W/System.err: at ca.on.sl.comp208.lhahncomp208a3m1.WebAsyncTask.doInBackground(MainActivity.java:59)
03-27 10:53:46.737 31032-31047/? W/System.err: at ca.on.sl.comp208.lhahncomp208a3m1.WebAsyncTask.doInBackground(MainActivity.java:51)
03-27 10:53:46.737 31032-31047/? W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:304)
03-27 10:53:46.737 31032-31047/? W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-27 10:53:46.737 31032-31047/? W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
03-27 10:53:46.737 31032-31047/? W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
03-27 10:53:46.737 31032-31047/? W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
03-27 10:53:46.737 31032-31047/? W/System.err: at java.lang.Thread.run(Thread.java:761)
03-27 10:53:46.738 31032-31047/? W/System.err: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
03-27 10:53:46.738 31032-31047/? W/System.err: at libcore.io.Posix.android_getaddrinfo(Native Method)
03-27 10:53:46.738 31032-31047/? W/System.err: at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
03-27 10:53:46.738 31032-31047/? W/System.err: at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:106)
【问题讨论】:
-
你能添加你看到的错误的完整堆栈跟踪吗?这有助于调试。
-
您是否添加了互联网权限?
-
@WoogieNoogie 我添加了堆栈跟踪,说“无法解析主机” - 转到该地址按预期工作。
-
@JisuHong 我已将权限添加到 Manifest.Xml 文件中
-
输入流抛出什么样的异常?