2012-05-12 2 views
1

ListItem을 클릭하면 4 개의 EditText 필드가있는 사용자 정의 대화 상자가 열립니다. 필드는 클릭 된 행에 따라 현재 데이터로 설정됩니다. 대화 상자의 목적은 사용자가 데이터를 업데이트 할 수 있도록하는 것입니다 (금융 응용 프로그램 임). 사용자가 대화 상자에서 "제출"을 클릭하면 실제로 업데이트를 적용하는 데 문제가 있습니다. 앱을 실행할 때 오류가 없습니다. 여기에 온 클릭 방법 :SQLite 업데이트 안드로이드 적용 안 함

protected void onListItemClick(ListView l, View v, int position, long id) { 

    List<Debt> values = datasource.getAllDebt(); 
    Debt item = values.get(position); 
    final long boxId = item.getId(); 
    // final String BoxId = String.valueOf(boxId); 
    final String BoxName = item.getName(); 
    final String BoxBalance = item.getBalance(); 
    final String BoxApr = item.getApr(); 
    final String BoxPayment = item.getPayment(); 

    // set up dialog 
    final Dialog dialog = new Dialog(manageDebts.this); 
    dialog.setContentView(R.layout.custom_dialog); 
    dialog.setTitle("Edit Debt Details"); 
    dialog.setCancelable(true); 

    // set up text 
    EditText et1 = (EditText) dialog.findViewById(R.id.editText1); 
    EditText et2 = (EditText) dialog.findViewById(R.id.editText2); 
    EditText et3 = (EditText) dialog.findViewById(R.id.editText3); 
    EditText et4 = (EditText) dialog.findViewById(R.id.editText4); 

    et1.setText(BoxName); 
    et2.setText(BoxBalance); 
    et3.setText(BoxApr); 
    et4.setText(BoxPayment); 

    // set up button 
    Button button = (Button) dialog.findViewById(R.id.button1); 
    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

      datasource.updateDebt(boxId, BoxName, BoxBalance, BoxApr, 
        BoxPayment); 

      dialog.dismiss(); 

     } 
    }); 

    dialog.show(); 
} 

내 데이터베이스 헬퍼 클래스의 업데이트 방법은 여기에 표시됩니다 :

public boolean updateDebt(long updateId, String debt_name, String debt_total, String apr, String payment) 
{ 
    ContentValues values = new ContentValues(); 
    values.put(MySQLiteHelper.COLUMN_ID, updateId); 
    values.put(MySQLiteHelper.COLUMN_DEBT_NAME, debt_name); 
    values.put(MySQLiteHelper.COLUMN_DEBT_TOTAL, debt_total); 
    values.put(MySQLiteHelper.COLUMN_APR, apr); 
    values.put(MySQLiteHelper.COLUMN_PAYMENT, payment); 
    return database.update(MySQLiteHelper.TABLE_DEBT, values, MySQLiteHelper.COLUMN_ID + " = " + updateId, null) > 0; 
} 

나는 COLUMN_ID과을 UpdateID리스트 뷰에서 올바른 행을 가리키는 것을 확인했습니다 및 SQL 데이터베이스.

내가보기 싫은 사람이 있습니까?

+0

datasource.getAllDebt(); 암호. –

+0

방금 ​​전 내 SQL 코드가 대부분있는 ​​전체 DebtDataSource 클래스를 추가했습니다. – KickingLettuce

답변

0

내 컴퓨터에서 코드를 테스트합니다.

업데이트 방법이 정상적으로 작동합니다.

그래서 더 많은 코드를 게시해야한다고 생각합니다.

또는 논리를 확인해야합니다.

+0

흠 ... 잡은 주셔서 감사합니다, 작동하지 않았다. – KickingLettuce

+0

내 대답을 편집합니다. 의견을 주셔서 감사합니다. –

0

이 더 잘 작동합니다 :

String whereClause = MySQLiteHelper.COLUMN_ID + " = ?"; 
String[] whereArgs = new String[]{ String.valueOf(updateId) }; 
return database.update(MySQLiteHelper.TABLE_DEBT, 
     values, whereClause, whereArgs) > 0; 

String.valueOf() 전화는 단순히 문자열 값으로 ID를 변환합니다.

+0

... 코드를 단순화 해 주지만 문제는 해결되지 않습니다. – KickingLettuce

+0

'updateDebt' 메소드에서'database' 값은 어디에서 오는가? 쓰기 가능한 데이터베이스입니까? 아니면 대신에'getReadableDatabase'를 호출 했습니까? – twaddington

+0

방금 ​​전 원래 게시물에 전체 수업을 모두 추가했습니다. 도와 주셔서 다시 한번 감사드립니다! – KickingLettuce

1

아마도 업데이트로 인해 제약 조건을 위반하고 있습니까? DB 코드를 보지 않고 그냥 짐작할 수 있습니다.

편집

이 행 id 변수 주위에 작은 따옴표를 잃고, 그 DB를 문자열로 취급하고있다, 그리고 숫자가 실패되는 문자열 비교.

+0

이것이 필요한지 확실하지 않지만 더 많은 DB 코드를 게시했습니다. 그렇지 않다면 제약 조건을 위반하는 것은 무엇입니까? – KickingLettuce

+1

업데이트가 실패합니다.모든 필드는'text not null' 인 것처럼 보이므로, 업데이트 실패의 원인이되는 필드를 null로 저장하려고합니다. – Barak

+1

제약 조건 위반이있을 때'updateWithOnConflict'를 사용하여 무엇을해야하는지 알려줄 수 있습니다. – Barak

0

변수 i 다시, 내부 온 클릭 설정 방법 2 및 3

사이에 단계가되었다. 사용자가 업데이트 버튼을 누르면 변수는 EditText 필드의 값으로 RE-SET되어야합니다. 이와 같이 (단순화 된 버전) :

String name = null; 
EditText et; 

name = debt.getName(); 
et.setText(name); 
onclick { 
    ***name = et.getText().toString();*** 
    datasource.updateDebt(name); 
} 
관련 문제