字符串值在android中不起作用

时间:2012-11-01 09:18:35

标签: android

  

可能重复:
  Why is my string to string comparison failing?

我无法存储为字符串变量赋值,我在下面给出了我的程序

 public class MahindraActivity extends Activity {
    EditText userid,pwd1;
    Button loginbut;
    Statement st;
    ResultSet rs;
    Connection con;
    String userrole1;
    //String userid1,pass1;
    String url="jdbc:microsoft:sqlserver://10.0.2.2:1433;DatabaseName=swingmail";
    String user="sa";
    String pwd="sa";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mahindra);
        userid=(EditText) findViewById(R.id.uname);
       //String userid1=userid.getText().toString();
        pwd1=(EditText) findViewById(R.id.password);
        //String pass1=pwd1.getText().toString();
        loginbut=(Button) findViewById(R.id.login);
        loginbut.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(MahindraActivity.this, "Please Wait"+userid.getText().toString(), 10).show();
                login(userid.getText().toString(),pwd1.getText().toString());
            }

            private void login(String userid1, String pass1) {
                // TODO Auto-generated method stub
                try{
                    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                    con=DriverManager.getConnection(url, user, pwd);
                    st=con.createStatement();
                    String str="select userrole from usermaster where m_loginid='"+userid1+"'and m_password='"+pass1+"'" ;
                    rs= st.executeQuery(str);
                    while(rs.next()){
                    userrole1=rs.getString("userrole");
                    if(userrole1=="admin"){
                        Intent intent=new Intent(MahindraActivity.this,MainActivity.class);
                        startActivity(intent);
                    }

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_mahindra, menu);
        return true;
    }
}

当调试userrole的项目值时,从表中给出“admin”但是在将其分配给字符串变量String userrole1时,它在行

处给出null
while(rs.next()){
                    userrole1=rs.getString("userrole");
                    if(userrole1=="admin"){
                        Intent intent=new Intent(MahindraActivity.this,MainActivity.class);
                        startActivity(intent);
                    }

如果跳过循环并转到catch部分,可以请一些人解释原因或发现错误

5 个答案:

答案 0 :(得分:0)

使用:

userrole1.equals("admin");

答案 1 :(得分:0)

您无法将字符串与== operator进行比较。您必须使用String类的equalsequalsIgnoreCase方法。

试试这个。

if(userrole1.equalsIgnoreCase("admin"))
{
    Intent intent=new Intent(MahindraActivity.this,MainActivity.class);
    startActivity(intent);
}
  如果两个String对象包含,则

equalsIgnoreCase返回true   要么完全相同的数据,要么只是在不同情况下;假   否则。

答案 2 :(得分:0)

写下面的代码

if(userrole1.equals("admin")){
    Intent intent=new Intent(MahindraActivity.this,MainActivity.class);
    startActivity(intent);
}

而不是

if(userrole1=="admin"){
    Intent intent=new Intent(MahindraActivity.this,MainActivity.class);
    startActivity(intent);
}

并将String userrole1声明为login()方法,它将解决您的问题。

答案 3 :(得分:0)

其他答案是正确的,您不应该使用==运算符,但它们不会解决您的问题。如果rs.getString("userrole")的结果为null,则将其分配给变量并执行

if(userrole1.equals("admin")){

这会抛出NullPointerException userrole1null。相反,反过来比较:

if("admin".equals(userrole1)){

如果falseuserrole1,则会返回null,而不是摔倒。

答案 4 :(得分:0)

private void login(String userid1, String pass1) {
                // TODO Auto-generated method stub
                String userrole1 = "";
                try{

                    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                    Connection con=DriverManager.getConnection(url, user, pwd);
                    Statement st=con.createStatement();
                    String str="select userrole from usermaster where m_loginid='"+userid1+"'and m_password='"+pass1+"'" ;
                    ResultSet rs= st.executeQuery(str);
                    while(rs.next()){
                    userrole1=rs.getString(1);
                    }

                    if(userrole1.equals("admin")){
                        Intent intent=new Intent(MahindraActivity.this,MainActivity.class);
                        startActivity(intent);

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

我只是在方法中添加了String Userrole1,因此效果很好