2016-06-29 12 views
0

나는`내 테이블을 업데이트하려고 업데이트하지만 ERROR 선택 DB를 얻고있다 : 잘못된 지능 :안드로이드 SQLite는

public class DatabaseUtility extends SQLiteAssetHelper{ 

public static final String DATABASE = "contacts.db"; 
public static final String TABLE = "contacts"; 
public static final String C1_NAME = "name"; 
public static final String C2_PHONE = "phone"; 
public static final String C3_LOCATE_TOP = "locateTop"; 
public static final String C4_RATING = "rating"; 

public DatabaseUtility(Context context) { 
    super(context, DATABASE, null, 1); 
} 

} 

데이터베이스 액세스 클래스 업데이트 기능

다음
내 코드입니다 "널 (null)"
public void updateContact(String name, String oldPhone,String newPhone, int locateTop, int rating){ 
     try { 
      this.open(); 
      String updateWhere = String.format("%s=%s",this.databaseUtility.C2_PHONE, oldPhone); 
      ContentValues contentValues = new ContentValues(); 
      contentValues.put(this.databaseUtility.C1_NAME, name); 
      contentValues.put(this.databaseUtility.C2_PHONE,newPhone); 
      contentValues.put(this.databaseUtility.C3_LOCATE_TOP, locateTop); 
      contentValues.put(this.databaseUtility.C4_RATING, rating); 
      this.sqLiteDatabase.update(this.databaseUtility.TABLE, contentValues, updateWhere,null); 
      this.close(); 

     }catch (Exception e){ 
      Log.e("Error Update Contact",e.getMessage()); 
     } 
    } 

연락 유틸리티 클래스 업데이트 기능

public void updateContact(String name, String oldPhone, String newPhone, boolean locateTop, int rating){ 
    int lt = locateTop ? 1 : 0; 
    this.databaseAccess.updateContact(name, oldPhone, newPhone, lt, rating); 
} 

연락처 업데이트 작업

public class UpdateContactActivity extends AppCompatActivity { 

private ContactUtility contactUtility; 
private EditText txtName, txtPhone; 
private Button btnUpdate; 
private CheckBox chkTop; 
private RatingBar ratingContact; 
private Contact contact; 
private String oldPhone; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.add_contact); 
    getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); 
    ContactUtility contactUtility = new ContactUtility(getApplicationContext()); 
    this.contact =(Contact) getIntent().getSerializableExtra(Requests.EXTRA_CONTACT); 
    this.oldPhone = this.contact.getPhone(); 
    this.init(); 
} 


private void init(){ 
    this.txtName = (EditText) findViewById(R.id.txtName); 
    this.txtName.setFilters(new InputFilter[]{new InputFilter.AllCaps()}); 
    this.txtName.setText(this.contact.getName()); 



    this.txtPhone = (EditText) findViewById(R.id.txtPhone); 
    this.txtPhone.setText(this.contact.getPhone()); 

    this.chkTop = (CheckBox) findViewById(R.id.chkTop); 
    this.chkTop.setChecked(this.contact.isLocateTop()); 

    this.ratingContact = (RatingBar) findViewById(R.id.ratingContact); 


    if (chkTop.isChecked()){ 
     this.ratingContact.setEnabled(true); 
     this.ratingContact.setRating(contact.getRating()); 
    } 

    else{ 
     this.ratingContact.setEnabled(false); 
    } 


    this.chkTop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (chkTop.isChecked()) { 
       ratingContact.setEnabled(true); 
       ratingContact.setRating(contact.getRating()); 
      } 
      else { 
       ratingContact.setEnabled(false); 
       ratingContact.setRating(0); 
      } 
     } 
    }); 


    this.btnUpdate = (Button) findViewById(R.id.btnSave); 
    this.btnUpdate.setText(R.string.update_contact); 
    this.btnUpdate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      // update 
      String name = txtName.getText().toString(); 
      String phone = txtPhone.getText().toString(); 

      if (chkTop.isChecked()){ 
       float rate = ratingContact.getRating(); 
       contactUtility.updateContact(name,oldPhone, phone, true,(int)rate); // error 
      }else{ 
       contactUtility.updateContact(name,oldPhone, phone, false, 0); // error 
      } 


      String message = String.format("%s is updated",name); 
      Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
      setResult(Activity.RESULT_OK, intent); 
      finish(); 
     } 
    }); 

} 

} 

오류

프로그램은 클릭 버튼 후에 실행
06-29 11:45:21.802 13556-13556/com.umitkas.contacts E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.umitkas.contacts, PID: 13556 
                    java.lang.NullPointerException: Attempt to invoke virtual method 'void com.umitkas.contacts.ContactUtility.updateContact(java.lang.String, java.lang.String, java.lang.String, boolean, int)' on a null object reference 
                     at com.umitkas.contacts.UpdateContactActivity$2.onClick(UpdateContactActivity.java:95) 
                     at android.view.View.performClick(View.java:5198) 
                     at android.view.View$PerformClick.run(View.java:21147) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5417) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 06-29 11:45:25.570 13788-13788/com.umitkas.contacts E/ERROR SELECTING DB: Invalid int: "null" 

, 어떻게 오류가 귀하의 오류 메시지에 의해 판단

+0

어떤 줄에. 이 오류가 발생합니까? 'this.databaseUtility.TABLE'이 올바른 값입니까?'DatabaseUtility.TABLE'이 아니므로 정적입니까? – Marco7757

+0

@ Marco7757 기본적으로 'contactUtility'라는 코드를 업데이트하는 특정 행은 제공하지 않습니다. updateContact (name, oldPhone, phone, true, (int) rate);'여기도 Dat을 참조합니다. 액세스 클래스 업데이트 기능을 완화하십시오 – umtkas

답변

1

및 코드, 내가 좋겠 해결할 수 있습니다 가변적으로 contactUtility이 인스턴스화되지 않으므로 null 개체라고합니다. 분명히 null 개체에서 함수를 호출 할 수 없습니다.

당신은 그것을 사용하기 전에 contactUtility를 인스턴스화해야합니다 :

ContactUtility contactUtility = new ContactUtility(); 

이 어디서든 할 수있는 최초 사용 전에 (중 아주 라인이 변수를 만들거나 init() 기능에

+0

당신은 실수 였지만 여전히'java.lang.NullPointerException : 가상 메소드를 호출하려고 시도했습니다. 'void com.umitkas.contacts.ContactUtility.updateContact (java.lang.String, java. lang.String, java.lang.String, boolean, int) 'null 객체 참조'에서 contactUtility 인스턴스를 생성 한 후이 오류가 발생했습니다. – umtkas

+0

호출하기 전에 초기화 중이십니까? – Marco7757

+0

@ Marci7757 ofcourse, onCreate 메서드로 초기화했습니다. – umtkas