2013-03-07 113 views
0
public class MainActivity extends Activity { 

    private String md5(String in) { 
     MessageDigest digest; 
     try { 
      digest = MessageDigest.getInstance("MD5"); 
      digest.reset(); 
      digest.update(in.getBytes()); 
      byte[] a = digest.digest(); 
      int len = a.length; 
      StringBuilder sb = new StringBuilder(len << 1); 
      for (int i = 0; i < len; i++) { 
       sb.append(Character.forDigit((a[i] & 0xf0) >> 4, 16)); 
       sb.append(Character.forDigit(a[i] & 0x0f, 16)); 
      } 
      return sb.toString(); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

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

      @Override 
      public void onClick(View v) { 
       EditText text = (EditText) findViewById(R.id.editText1); 
       EditText text1 = (EditText) findViewById(R.id.editText2); 
       String userid = text.getText().toString(); 
       String pass = text1.getText().toString(); 

       Toast.makeText(
         MainActivity.this, 
         "Entered " + userid + " and password entered is " 
           + pass, Toast.LENGTH_LONG).show(); 

       pass = md5(pass + "@string/salt"); 

       Toast.makeText(
         MainActivity.this, 
         "Password after adding a salt and md5 hashing is now equal to " 
           + pass, Toast.LENGTH_LONG).show(); 

       /* This Line */DBAdapter db = new DBAdapter(this); // This Line. 
       db.open(); 
       Cursor c = db.getPasswordForUserName(userid); 
       if (c.moveToFirst()) { 
        if (c.getString(1) == pass) { 
         Toast.makeText(MainActivity.this, 
           "Authentication Succeded", Toast.LENGTH_SHORT) 
           .show(); 
         // proceed 
        } else { 
         Toast.makeText(MainActivity.this, "@string/AuthFail", 
           Toast.LENGTH_SHORT).show(); 
         // AuthFailure 
        } 
       } else { 
        Toast.makeText(MainActivity.this, "@string/UserNotFound", 
          Toast.LENGTH_SHORT).show(); 
        // where to from here 
       } 
      } 
     }); 
    } 
} 

我对Android编程非常陌生。所以我从很多地方采集了代码片段,然后将它们合并。错误:xyz类的构造函数未定义

基本上我想要做的是查询当地的SQLite数据库现有的价值UserNamePassword + salt(with md5 hash)

所以我复制了一些代码来创建一个数据库帮助类(DBAdapter),它具有处理数据库的基本方法。

现在的问题是在MainActivity.java文件中。标记为“此行”的行在代码中给出了错误构造函数DBAdapter(new View.OnClickListener(){})未定义。我不知道这是什么意思。我应该怎么做才能使它工作?

+3

我会建议任何人尝试学习Android来首先学习Java。具体来说,您正在使用一个询问DBAdapter来接受一个View.OnClickListener作为参数。 – 2013-03-07 23:19:18

回答

2

我只能猜测 尝试MainActivity.this,有一个预感..

DBAdapter db = new DBAdapter(MainActivity.this); 
+0

此修复程序工作的原因是因为您在OnClickListener中调用构造函数窗体。所以“this”是指OnClickListener实例,而不是您的活动的实例。 – 2013-03-07 23:24:35

+0

啊!它确实有用!我理解这个解释!谢谢@Jeffrey – tMJ 2013-03-07 23:28:15

1

我建议阅读更多有关Android的作品。在这种特殊情况下,您需要了解Contexts,但我会开始here

如前所述,您可以使用MainActivity.this为DBAdapter提供正确的应用程序上下文。