Java 如何检查twitch.tv中的流是否打开?

Java 如何检查twitch.tv中的流是否打开?,java,twitch,Java,Twitch,下面是我的getStream方法的代码: public static Twitch_Stream getStream(String channelname) { try { String json = API.readJsonFromUrl("https://api.twitch.tv/kraken/streams?channel=" + channelname); Twitch_Stream stream = new Twitc

下面是我的
getStream
方法的代码:

public static Twitch_Stream getStream(String channelname) {
        try {
            String json = API.readJsonFromUrl("https://api.twitch.tv/kraken/streams?channel=" + channelname);

            Twitch_Stream stream = new Twitch_Stream();
            if (json.equalsIgnoreCase("[]")) {
                stream.setOnline(false);
                return stream;
            }

            JsonArray jb = gson.fromJson(json, JsonArray.class);
            if (jb.size() != 0) {
                JsonObject jo = (JsonObject) jb.get(0);
                stream.setOnline(true);
                stream.load(jo);
            }

            return stream;
        } catch (Exception error) {
            error.printStackTrace();
        }

        return null;

    }
这是Twitch_流类的代码

当我做这种东西的时候

Twitch_Stream streamer = Twitch_API.getStream("Jankos");
Bukkit.broadcastMessage("getName " + streamer.getName());
Bukkit.broadcastMessage(streamer.isOnline() + "");
streamer.getName()
return
null
streamer.isOnline()
返回
false
,即使流已打开


我在哪里犯了错误?

我不知道您的代码中有什么问题,但简单的解决方法是阅读
中的内容。”https://api.twitch.tv/kraken/streams/“+频道
格式为JSON:

{
    "_links" : {
       //links to stream and channel
    },
    "stream" : {
       //details about current stream
    }
}
现在,如果
stream
键的值为
null
则流离线。如果不为空,则为联机

所以你的代码看起来像

public static void main(String[] argv) throws IOException {

    System.out.println(checkIfOnline("Jankos"));
    System.out.println(checkIfOnline("nightblue3"));

}

public static boolean checkIfOnline(String channel) throws IOException {
    String channerUrl = "https://api.twitch.tv/kraken/streams/" + channel;

    String jsonText = readFromUrl(channerUrl);// reads text from URL
    JSONObject json = new JSONObject(jsonText);

    return !json.isNull("stream");
}

private static String readFromUrl(String url) throws IOException {
    URL page = new URL(url);
    try (Stream<String> stream = new BufferedReader(new InputStreamReader(
            page.openStream(), StandardCharsets.UTF_8)).lines()) {
        return stream.collect(Collectors.joining(System.lineSeparator()));
    }
}
如果您没有Java8,您可以将从URL读取文本的代码重写为

private static String readFromUrl(String url) throws IOException {
    URL page = new URL(url);
    StringBuilder sb = new StringBuilder();
    Scanner scanner = null;
    try{
        scanner = new Scanner(page.openStream(), StandardCharsets.UTF_8.name());
        while (scanner.hasNextLine()){
            sb.append(scanner.nextLine());
        }
    }finally{
        if (scanner!=null)
            scanner.close();
    }
    return sb.toString();
}

或者从我看到的情况来看,您可以使用
API.readJsonFromUrl
而不是
readFromUrl

发布有问题的代码。如果在此处发布的时间过长,则表示您没有将示例简化为此问题所需的部分。无法打开此链接并检查;/?堆栈溢出的目的不仅是帮助您,而且是帮助其他有类似问题的人。如果你的链接断开了,那么你的问题对其他人来说毫无用处。这是Java8中添加的功能。你可以在这里找到更多信息。简言之,这是你想对某些元素进行的操作管道。我不知道。您正在使用Java 8吗?@dekros如果您正在使用Eclipse或任何其他IDE,它应该能够为您添加此导入。无论如何,这些类属于
java.util.stream
包,所以使用
import java.util.stream.collector
导入java.util.stream.stream我有这个错误,我使用NetBeans,我有java版本8更新45(build 1.8.0_45-b15),我无法重现这个问题。您的项目是否配置为使用Java8编译器和库?您能否在
属性->源代码->源代码/二进制格式
属性->库->java平台
中检查项目的值?
private static String readFromUrl(String url) throws IOException {
    URL page = new URL(url);
    StringBuilder sb = new StringBuilder();
    Scanner scanner = null;
    try{
        scanner = new Scanner(page.openStream(), StandardCharsets.UTF_8.name());
        while (scanner.hasNextLine()){
            sb.append(scanner.nextLine());
        }
    }finally{
        if (scanner!=null)
            scanner.close();
    }
    return sb.toString();
}