【问题标题】:switch condition not working in Android切换条件在 Android 中不起作用
【发布时间】:2014-05-22 08:52:22
【问题描述】:

所以我有这个代码:

package com.sunil.phpconnect;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
        Button nao;
        Button foto;
        Button novamen;
        TextView ola;    
        HttpClient httpclient1, httpclient;
        HttpGet request1, request;
        HttpResponse response1, response;
        String url,iduser, urlmensagens;


             @Override
             public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              Bundle  extras = getIntent().getExtras();
              iduser= extras.getString("userid");


               TextView result = (TextView) findViewById(R.id.tvResult);
               //String g = result.getText().toString();
              // String h = "valor";

               urlmensagens = ("http://mywebsite.php?iduser="+iduser);
               novamen = (Button) findViewById(R.id.mensagens);


                   //cenas da net
                    try {
                     httpclient1 = new DefaultHttpClient();
                     request1 = new HttpGet(urlmensagens);
                     response1 = httpclient1.execute(request1);

                    }
                    catch (Exception e){

                    }
                    try{ 
                      BufferedReader dr = new BufferedReader(new InputStreamReader(
                        response1.getEntity().getContent()));


                      String mensage = "";


                      mensage = dr.readLine();

                      String check_sms = mensage;

                      Toast.makeText(getApplicationContext(), check_sms,
                              Toast.LENGTH_LONG).show();



                //novamen.setText(check_sms + " Mensagens por ler!");





                      switch(check_sms) {
                      case "b":
                          novamen.setVisibility(View.GONE);
                          break;
                      case "a":
                          novamen.setVisibility(View.VISIBLE);
                          break;
                      default:
                          novamen.setVisibility(View.GONE);
                  }


                    } catch (Exception e) {
                          // Code to handle exception  

                         }

              url = ("http://mywebsite.php?action=requestuserdata&userid="+iduser);


              try {
               httpclient = new DefaultHttpClient();
               request = new HttpGet(url);
               response = httpclient.execute(request);
              }

              catch (Exception e) {
               }


              try {
               BufferedReader rd = new BufferedReader(new InputStreamReader(
                 response.getEntity().getContent()));
               String line = "";
               line = rd.readLine();



                   if(line == null){
                       Toast.makeText(getApplicationContext(), "Numero nao atribuido.",
                                  Toast.LENGTH_LONG).show();
                       Intent wowmuch = new Intent(getApplicationContext(), pin.class);
                     startActivity(wowmuch);    
                   }else{
                       result.append(line);

                   }

              } catch (Exception e) {

              }

              novamen = (Button) findViewById(R.id.mensagens);
                novamen.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                            chamaMensagens();
                            }

                        public void chamaMensagens () {

                            Intent mens = new Intent(getApplicationContext(),mensagens.class);
                            mens.putExtra("userid", iduser);
                            startActivity(mens);}});


              foto = (Button) findViewById(R.id.button1);
              foto.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    Chamafoto();
                }
                public void Chamafoto() {

                    Intent wowmuch = new Intent(getApplicationContext(), Foto.class);
                    wowmuch.putExtra("userid", iduser);        
                    startActivity(wowmuch);
                }
            });
              Toast.makeText(getApplicationContext(), iduser, 
                      Toast.LENGTH_SHORT).show();
              nao = (Button) findViewById(R.id.button2);
                nao.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                            chamaConsulta();
                            }
                    }
                );
                }

                        public void chamaConsulta () {

                            Intent wowmuch = new Intent(getApplicationContext(),pin.class);

                            startActivity(wowmuch); 
                        }


}

当我到达这部分时:

switch(check_sms) {
                          case "b":
                              novamen.setVisibility(View.GONE);
                              break;
                          case "a":
                              novamen.setVisibility(View.VISIBLE);
                              break;
                          default:
                              novamen.setVisibility(View.GONE);
                      }

当变量“check_sms”的值为“b”时,该按钮将不可见/消失。

我测试了变量是否正在显示并且它在 Toast 中。

我也尝试过使用 if 语句,但什么也没做。

【问题讨论】:

  • 开启String??去Enum...我猜你已经用jdk1.7编译了src代码..用jdk1.6编译它..
  • @DerGolem 这也是我的想法,但是如果您查看底部,他们会说 if 语句也不起作用。我想知道这可能是一个案例问题,你是否得到 B 并根据 b 检查它,即尝试使用 .equalsIgnoreCase()
  • 您可以使用字符来切换大小写。获取字符串的字符并添加 case 'a' case 'b' 之类的情况。
  • @feldoh:因为他们可能尝试了if (check_sms == "a"),而不是使用 equals() 方法
  • 这点也不错+1

标签: java android if-statement switch-statement


【解决方案1】:

switch(someInteger) 可以工作。
switch(someChar) 可以工作。
switch(someEnum) 可以工作。
switch(someString) 只能在 JAVA 1.7 中工作。

据我所知,Android 尚不支持 Java 1.7。

【讨论】:

  • 我想使用 Int insted String,但我连接到 url 并获取数据的代码正在获取字符串变量: BufferedReader dr = new BufferedReader(new InputStreamReader( response1.getEntity().getContent() ));字符串消息 = ""; mensage = dr.readLine();
  • 您可以将字符转换为 ASCII 码。所以,'a' 会是 97,'b' 会是 98,......所以,一旦你有了你的 charint code = (int) character;。然后使用switch(code) - 或者简单地使用switch(character) 来保存整数转换。
  • 所以我可以像这样进行从 String 到 Int 的转换: int code = (int) mensage; ?
  • 显然,不是。消息是一个字符串。您可以从中取出一个字符(比如说第一个)并使用它。如:char character = mensage.toLowerCase().charAt(0); 但我最好的选择是 int 或 Enum。因为 mensage 可能包含一个关键字,它可以在切换一个案例而不是另一个案例之间产生差异。
  • 我把字符 = mensage.toLowerCase().charAt(1);它有效。在位置 0 给我空白值
【解决方案2】:

打开String??去Enum...我猜你已经用jdk1.7编译了src代码..用jdk1.6编译它......还不支持jdk1.7..

【讨论】:

    【解决方案3】:

    您可以在 java 1.7 中使用字符串,仅作为 Der Golem 指定。您可以使用 enum、char、int 类型。您可以参考http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html 了解更多信息。

    从上面的链接

    与 if-then 和 if-then-else 语句不同,switch 语句可以有许多可能的执行路径。开关适用于 byte、short、char 和 int 原始数据类型。它也适用于枚举类型(在 Enum Types 中讨论)、String 类和一些包装某些基本类型的特殊类:Character、Byte、Short 和 Integer(在 Numbers and Strings 中讨论)。

    【讨论】:

      【解决方案4】:

      当然你可以在 Java 7 中使用 swich,但在这种情况下(只有 2 个选项),我将使用

      if ( "a".equalsIgnoreCase( check_sms ) ){
         ....
      } else {
         ....
      }
      

      切勿将 check_sms == "a" 用于此目的。

      【讨论】:

      • 您的解决方案不起作用。我以前切换过这个代码: if(check_sms.equals("a")){...}else{...} 但是当我尝试将应用程序属性编码切换为 ISO-8859-1 时,有些问题
      • 请用trace检查check_sms的值。
      • 如何进行跟踪?
      • 就在 if(你的开关)之前写 System.out.println( check_sms );这将帮助我们看到价值
      • System.out.println( check_sms );什么也没做,但我把它放在吐司里,它显示了。我的问题解决了。 Tnks 全部
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 2012-11-01
      • 2017-09-03
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多