2013-03-07 5 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 프로그래밍에있어 매우 새로운 기능입니다. 그래서 많은 장소에서 코드 스 니펫을 가져 와서 결합했습니다.Error : xyz 클래스의 생성자가 정의되지 않았습니다.

기본적으로 로컬 값인 UserNamePassword + salt(with md5 hash)에 대해 로컬 SQLite DB를 쿼리하기 만하면됩니다.

그래서 나는 데이터베이스를 다루는 꽤 기본적인 방법을 가진 데이터베이스 도우미 클래스 (DBAdapter)를 만들기 위해 몇 가지 코드를 복사했습니다.

이제 문제는 MainActivity.java 파일에 있습니다. "this line"코드에으로 표시된 줄은 오류를 나타냅니다. 생성자 DBAdapter (새 View.OnClickListener() {})는 정의되지 않습니다. 나는 이것이 무엇을 의미하는지 모른다. 작동 시키려면 어떻게해야합니까? 난 단지 해보십시오 MainActivity.this을 추측 할 수

+3

나는 자바를 배우기 위해 안드로이드를 배우려고하는 사람에게 조언 해줄 것이다. 특히 묻는 DBAdapter를 사용하여 View.OnClickListener를 인수로 허용합니다. –

답변

2

는 직감 .. 내가 어떻게 안드로이드 작품에 대한 자세한 내용을 읽어 제안

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

이 수정 프로그램이 작동하는 이유는 OnClickListener 내부에서 생성자 폼을 호출하기 때문입니다. 그래서 "this"는 여러분의 액티비티 인스턴스가 아닌 OnClickListener 인스턴스를 참조합니다. –

+0

아아! 그것은 일했다! 그리고 나는 그 설명을 이해한다! 고마워요 @ 제프리 – tMJ

1

을 얻었다. 이 특별한 경우에는 Contexts에 대해 알아야하지만 here으로 시작합니다.

이미 제안했듯이 MainActivity.this을 사용하면 올바른 응용 프로그램 컨텍스트를 DBAdapter에 제공 할 수 있습니다.

관련 문제