【问题标题】:String statement returning null from switch statement从 switch 语句返回 null 的字符串语句
【发布时间】:2014-07-31 04:03:50
【问题描述】:

我目前正在开发一个允许您在 VideoView 中观看流式视频的 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);
}

不能正常工作的是,在这个选择流的方法中,我调用了另一个运行线程的方法(checkStreamLink();)。根据您选择的流,线程将调用另一个方法来打开网页,读取一行文本,然后将该文本设置为String 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 语句所证明的那样。之后每次选择流时,String streamURL 都会返回您上次选择流时应该收到的文本。我似乎无法弄清楚为什么会发生这种情况,如果能提供任何帮助,我将不胜感激。

【问题讨论】:

  • 位置变量的值是多少?它也会滞后吗?
  • ...您是否以某种方式等待此线程完成?因为如果不是,您的日志记录代码很有可能在线程之前运行。
  • @RJadhav,位置变量只是数组中所有流名称所在的位置。它一点也不滞后。
  • @radai,我假设线程已完成并且代码已被记录,但现在使用其他日志语句向我展示了其他情况。

标签: java android string null switch-statement


【解决方案1】:

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

【讨论】:

  • 谢谢你,贾斯汀·瑞达。这让我朝着正确的方向前进。你是一个很大的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多