Java Android If-Else故障排除

Java Android If-Else故障排除,java,android,if-statement,Java,Android,If Statement,这是我创建的一个函数 如您所见,这将读取搜索文件名的文件,然后读取--温度升高-- 问题不是每个文件名都有--温度升高--和 我尝试使用else语句,但是如果我从else语句中删除中断,对于文件名,如果没有--温度升高--,整个应用程序将崩溃 但是如果我在else语句中添加一个break语句,则每个filename都将运行else语句,即使它们包含--温度升高-- 我还尝试过在没有的情况下执行一个简单的else语句!line.equals(“--TEMPERATURE UP--”但它仍然是一样的

这是我创建的一个函数

如您所见,这将读取搜索
文件名的文件,然后读取
--温度升高--

问题不是每个
文件名都有
--温度升高--

我尝试使用else语句,但是如果我从else语句中删除
中断
,对于
文件名
,如果没有
--温度升高--
,整个应用程序将崩溃

但是如果我在else语句中添加一个
break
语句,则每个
filename
都将运行else语句,即使它们包含
--温度升高--

我还尝试过在没有
的情况下执行一个简单的else语句!line.equals(“--TEMPERATURE UP--”
但它仍然是一样的

要么我必须在else添加
break
以运行
else
代码,该代码将不会运行
if
代码,要么我删除
break
,该代码运行
if
代码,但无法运行
else
代码,因为它将崩溃

请告知我应该如何更改代码,这样当它读取
--温度升高--
时,它将运行
if
代码,否则它将运行
else
代码

非常感谢

public void tempUp() {
    SharedPreferences sharedTest = getSharedPreferences("MySharedTest", Context.MODE_PRIVATE);
    String filename = sharedTest.getString("filename", " ");
    Log.d("File readed: ", filename);
    File dir = new File(path);
    File[] files = dir.listFiles();
    for (File f : files) {
        if (f.isFile()) {
            BufferedReader inputStream = null;
            try {
                inputStream = new BufferedReader(new FileReader(f));
                String lineToRead = filename;
                String CurrentLine;
                while ((CurrentLine = inputStream.readLine()) != null) {
                    if (CurrentLine.equals(lineToRead)) {
                        try
                        {
                            BufferedReader reader = new BufferedReader(new FileReader(f));
                            String line = reader.readLine();
                            while(line !=null)
                            {
                                line = reader.readLine();
                                if(line.equals("--TEMPERATURE UP--"))
                                {
                                    final String ms = reader.readLine();
                                    Log.d("temp up: ", ms);
                                    new Thread(new Runnable()
                                    {
                                        @Override
                                        public void run()
                                        {
                                            String message = "\u000704NTX" + ms + "\r";
                                            byte[] byte_array = message.getBytes();

                                            try
                                            {
                                                SharedPreferences prefx = getSharedPreferences("Device_Data", Context.MODE_PRIVATE);
                                                String device_ip = prefx.getString("local_ip", " ");
                                                String host = device_ip;
                                                Socket socket = new Socket(host, 8070);
                                                DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                                                out.write(byte_array);
                                                out.flush();
                                            }
                                            catch (Exception e)
                                            {
                                            }
                                        }
                                    }).start();
                                    break;
                                }

                                else if (!line.equals("--TEMPERATURE UP--"))
                                {
                                    Toast.makeText(TestScreen.this, "There is no Temperature Display for this profile.", Toast.LENGTH_LONG).show();
                                    break;
                                }

                                }


                        }
                        catch (IOException e)
                        {
                            e.printStackTrace();
                        }



                    }

                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}
更新:

                    try
                    {
                        BufferedReader reader = new BufferedReader(new FileReader(f));
                        String line = reader.readLine();
                        boolean hasTempDisplayProfile = false;
                        while((line = reader.readLine()) !=null)
                        {

                            if(line.equals("--TEMPERATURE UP--")) {
                                hasTempDisplayProfile = true;
                                final String ms = reader.readLine();
                                Log.d("temp up: ", ms);
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        String message = "\u000704NTX" + ms + "\r";
                                        byte[] byte_array = message.getBytes();

                                        try {
                                            SharedPreferences prefx = getSharedPreferences("Device_Data", Context.MODE_PRIVATE);
                                            String device_ip = prefx.getString("local_ip", " ");
                                            String host = device_ip;
                                            Socket socket = new Socket(host, 8070);
                                            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                                            out.write(byte_array);
                                            out.flush();
                                        } catch (Exception e) {
                                        }
                                    }
                                }).start();
                                break;
                            }

                            }

                        if (hasTempDisplayProfile){
                            Toast.makeText(TestScreen.this, "There is no Temperature Display for this profile.", Toast.LENGTH_LONG).show();
                            break;
                        }

                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }

您当前的实施是:

while(readLine) {
   if (line.equal("--TEMPERATURE UP--") {
     // process
   } else {
     // Toast message
   }
}
你现在看到问题了吗?问题是您正在为每一行重新测试
--温度升高--
,并在每一行不匹配时显示Toast

这是错误的

您需要检查的是,整个文件是否不包含
--温度升高--
,如果是,则显示烤面包片

因此,正确的实现将涉及一个标志:

boolean hasTempDisplayProfile = false;
while(readLine) {
   if (line.equal("--TEMPERATURE UP--") {
     // process
     hasTempDisplayProfile = true;
   }
}

if (!hasTempDisplayProfile) {
  // Toast message
}
编辑 您的代码还有另一个严重缺陷:

String line = reader.readLine();
while(line !=null){
    line = reader.readLine();
     ... your process ...
}
在这段代码中,您读取一行。然后检查
中的行不等于null,而
。问题是您没有使用该行,而是使用进程读取另一个
line=reader.readLine()
。当您到达文件末尾时,它将抛出
NullPointerException

更改为:

String line;
while((line = reader.readLine()) !=null){
     // Do not read new line here. Just process with "line"
}
顺便说一下,您的代码需要改进。它现在有太多的缩进,这是非常沮丧的阅读。您可以尝试:

  • 将您的函数分解为更小的模块
  • 使用fail fast。如果条件保持为
    true
    ,请在
    false
    时尝试返回,而不是包装代码。例如:

      for (File f: files) {
          if (f.isFile()) {
             // Your process
          }
      }
    
  • 应改为:

          for (File f: files) {
             if (!f.isFile()) {
                continue;
             }
             // Your process
          }
    

    它减少了一级缩进。

    请对代码应该执行的操作添加一个清晰的描述。也许您应该打印这行?if语句没有被破坏……无论在什么情况下,
    while
    都会被破坏,那么为什么在
    while
    时会有一个
    语句呢?如果它读取
    --温度升高--
    ,基本上就是一个线程,如果不是,我只想吐司一条消息。就这些@TimBiegeleisenAlso,你为什么要为同一个文件创建两个BufferedReader?您好,您能告诉我在何处中断if-else语句吗?我已将布尔值添加为advice,但每当我尝试运行这些配置文件时,如果没有
    --温度升高--
    ,它仍会崩溃,错误指向
    (line.equal(“--温度升高--”
    所以我想我的中断可能是错误的。目前我在if和ELSED上都设置了2个中断
    中断
    if(hasTempDisplayProfile)中是否有任何
    中断{
    ?您现在可以捕获代码的屏幕截图并与我共享吗?您好,请刷新页面并检查问题,我已将当前代码添加到
    更新:
    下,请重新阅读我的答案,如果(!hasTempDisplayProfile)请块
    放置在
    之外,而
    循环。您好,我已根据您编辑的答案进行了更新,并尝试放置
    if(!hasTempDisplayProfile)
    在while循环中和在while循环外。两者都有相同的结果。现在发生的情况是,如果文件没有
    --温度升高--
    ,则不会发生任何错误,也不会发生任何事情,但是如果文件有
    --温度升高--
    ,则它仍会运行进程,但同时在
    if(!hasTempDisplayProfile)内执行toast操作
    同样如此