【问题标题】:IOexception when connecting to REST Service SDK25+连接 REST 服务 SDK25+ 时出现 IOexception
【发布时间】: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 文件中
  • 输入流抛出什么样的异常?

标签: android json http


【解决方案1】:

我刚刚遇到了同样的问题。从您的堆栈跟踪中,您得到了

03-27 10:53:46.733 31032-31047/? W / System.err: java.net.UnknownHostException:无法解析主机 “services.groupkt.com”:没有与主机名关联的地址

这似乎有一个错误的基本 URL,我可以通过从您的代码中替换以下来解决

task.execute("http://services.groupkt.com/country/get/all");

进入

task.execute("http://groupkt.com/country/get/all");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2016-12-29
    • 2014-09-06
    • 2018-05-05
    • 2010-12-11
    相关资源
    最近更新 更多