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

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

ループをスキップしてキャッチ部分に移動した場合、理由を説明したり、エラーを見つけたりできますか?

4

5 に答える 5

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

使用する:

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

文字列を。と比較することはできません== operator。Stringクラスのequalsまたはメソッドを使用する必要があります。equalsIgnoreCase

これを試して。

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

equalsIgnoreCase2つのStringオブジェクトにまったく同じデータが含まれている場合、または大文字と小文字のみが異なる場合はtrueを返します。それ以外の場合はfalse。

于 2012-11-01T09:20:36.290 に答える
0

==他の答えはあなたがオペレーターを使うべきではないということは正しいです、しかしそれらはあなたの問題を解決しません。の結果がでrs.getString("userrole")ある場合null、これは変数に割り当てられ、実行します

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

これはそのままスローNullPointerExceptionuserrole1ますnull。代わりに、比較を逆にします。

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

これは、が倒れるのではなく、のfalse場合に返されます。userrole1null

于 2012-11-01T10:17:16.137 に答える
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();
                }
            }
        });
    }

メソッド内にStringUserrole1を追加しただけなので、完全に機能します

于 2012-11-05T09:16:08.457 に答える