我无法存储为字符串变量赋值,我在下面给出了我的程序
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
时,它在行
while(rs.next()){
userrole1=rs.getString("userrole");
if(userrole1=="admin"){
Intent intent=new Intent(MahindraActivity.this,MainActivity.class);
startActivity(intent);
}
如果跳过循环并转到catch部分,可以请一些人解释原因或发现错误
答案 0 :(得分:0)
使用:
userrole1.equals("admin");
答案 1 :(得分:0)
您无法将字符串与== operator
进行比较。您必须使用String类的equals
或equalsIgnoreCase
方法。
试试这个。
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
userrole1
为null
。相反,反过来比较:
if("admin".equals(userrole1)){
如果false
为userrole1
,则会返回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,因此效果很好