Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从switch语句返回null的String语句_Java_Android_String_Null_Switch Statement - Fatal编程技术网

Java 从switch语句返回null的String语句

Java 从switch语句返回null的String语句,java,android,string,null,switch-statement,Java,Android,String,Null,Switch Statement,我目前正在开发一个Android应用程序,它允许你在视频视图中观看流媒体视频。我有一个方法允许您通过switch语句从四个流中选择一个。工作正常,代码如下: public void playStream(int position) { switch (position) { case 0: streamOn = true; streamPos = 0; logString = "M";

我目前正在开发一个Android应用程序,它允许你在视频视图中观看流媒体视频。我有一个方法允许您通过switch语句从四个流中选择一个。工作正常,代码如下:

public void playStream(int position) {
    switch (position) {
        case 0:
            streamOn = true;
            streamPos = 0;
            logString = "M";
            posSelected = "0";
            break;
        case 1:
            streamOn = true;
            streamPos = 1;
            logString = "J";
            posSelected = "1";
            break;
        case 2:
            streamOn = true;
            streamPos = 2;
            logString = "B";
            posSelected = "2";
            break;
        case 3:
            streamOn = true;
            streamPos = 3;
            logString = "N";
            posSelected = "3";
            break;
        default:
            break;
    }
    checkStreamLink(position);

    Log.wtf(logString, posSelected);
    Log.wtf(logString, streamURL);
}
public void checkStreamLink(final int position) {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                switch (position) {
                    case 0:
                        streamURL = getStreamLink("LINK 0 GOES HERE");
                        break;
                    case 1:
                        streamURL = getStreamLink("LINK 1 GOES HERE");
                        break;
                    case 2:
                        streamURL = getStreamLink("LINK 2 GOES HERE");
                        break;
                    case 3:
                        streamURL = getStreamLink("LINK 3 GOES HERE");
                        break;
                    default:
                        break;
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();
}


public String getStreamLink (String textSource) {
    URL streamURL;
    String errorParsingURL = "ERROR PARSING URL";
    try {
        streamURL = new URL(textSource);
        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(streamURL.openStream()));
        String StringBuffer;
        String stringText = "";
        while ((StringBuffer = bufferReader.readLine()) != null) {
            stringText += StringBuffer;
        }
        bufferReader.close();
        return stringText;
    }
    catch (MalformedURLException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    return errorParsingURL;
}
工作不正常的是,在这个选择流的方法中,我调用了另一个运行线程的方法(
checkStreamLink();
)。根据您选择的流,线程将调用另一个方法打开网页,读取一行文本,然后将该文本设置为
字符串streamURL
。这两种方法的代码如下:

public void playStream(int position) {
    switch (position) {
        case 0:
            streamOn = true;
            streamPos = 0;
            logString = "M";
            posSelected = "0";
            break;
        case 1:
            streamOn = true;
            streamPos = 1;
            logString = "J";
            posSelected = "1";
            break;
        case 2:
            streamOn = true;
            streamPos = 2;
            logString = "B";
            posSelected = "2";
            break;
        case 3:
            streamOn = true;
            streamPos = 3;
            logString = "N";
            posSelected = "3";
            break;
        default:
            break;
    }
    checkStreamLink(position);

    Log.wtf(logString, posSelected);
    Log.wtf(logString, streamURL);
}
public void checkStreamLink(final int position) {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                switch (position) {
                    case 0:
                        streamURL = getStreamLink("LINK 0 GOES HERE");
                        break;
                    case 1:
                        streamURL = getStreamLink("LINK 1 GOES HERE");
                        break;
                    case 2:
                        streamURL = getStreamLink("LINK 2 GOES HERE");
                        break;
                    case 3:
                        streamURL = getStreamLink("LINK 3 GOES HERE");
                        break;
                    default:
                        break;
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();
}


public String getStreamLink (String textSource) {
    URL streamURL;
    String errorParsingURL = "ERROR PARSING URL";
    try {
        streamURL = new URL(textSource);
        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(streamURL.openStream()));
        String StringBuffer;
        String stringText = "";
        while ((StringBuffer = bufferReader.readLine()) != null) {
            stringText += StringBuffer;
        }
        bufferReader.close();
        return stringText;
    }
    catch (MalformedURLException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    return errorParsingURL;
}

我遇到的问题是,
String streamURL
在第一次使用时返回null,我包含的
Log
语句就证明了这一点。此后每次选择流时,
字符串streamURL
都会返回上次选择流时应该收到的文本。我似乎无法理解为什么会发生这种情况,我希望得到任何帮助。

您得到的是空值,因为getStreamLink在您打印结果后返回其值。在getStreamLink方法末尾打印结果日志消息,以查看返回的实际值,并在该点调用任何其他功能。

位置变量的值是多少?它是否也会延迟?…您是否以某种方式等待此线程完成?因为如果不是,日志代码很可能在线程之前运行。@RJadhav,position变量就是数组中所有流名称所在的位置。它一点也不延迟。@radai,我假设线程已经完成,代码已经被记录,但是现在玩其他日志语句会让我看到其他情况。谢谢你,justinreda。这让我找到了正确的方向。你帮了大忙。