2013-03-07 118 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提供正確的應用程序上下文。