-1

可能重复:
为什么我的字符串比较失败?

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

 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;
    }
}

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

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

如果loop被跳过并进入catch部分,请有人解释原因或找出错误

4

5 回答 5

0

利用:

userrole1.equals("admin");
于 2012-11-01T09:20:05.347 回答
0

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

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

这将按NullPointerException原样抛出userrole1null相反,反转比较:

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

这将返回falseif userrole1is null,而不是跌倒。

于 2012-11-01T10:17:16.137 回答
0

您不能将字符串与== operator. 您必须使用String 类的equalsorequalsIgnoreCase方法。

尝试这个。

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

equalsIgnoreCase如果两个 String 对象包含完全相同的数据或者它们只是大小写不同,则返回 true;否则为假。

于 2012-11-01T09:20:36.290 回答
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() 方法,它将解决您的问题。

于 2012-11-01T09:24:27.043 回答
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,因此可以完美运行

于 2012-11-05T09:16:08.457 回答