2016-06-13 30 views
-1

データベースのデータをListViewに表示しようとしています。 ListViewの各アイテムには1つのポジションがあり、それは同じなので、DELETEクエリのIDとしてintの位置を使用しています。しかし、何もしません。私はボタンのクリックイベント中にメソッドを呼び出しています。これは、SQLiteのデータベースクラスからの機能である:含まれている。これは私の活動であるIDが正常に機能しない

public Cursor deleteFromRegSintomasWhereId(long id) { 
    String sql = "DELETE FROM Reg_sintomas WHERE _ID= ? ; " ; 
    String[] args = new String[]{id + ""}; 
    Cursor result = this.db.rawQuery(sql, args); 
    return result; 
} 

ListView:これはアイテムがクリックされたときにロードする活動をされ

package com.example.bugdroid.menuexe.TabFragments; 

import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.bugdroid.menuexe.Activities.DetalhesSintoma; 
import com.example.bugdroid.menuexe.Activities.VerRegsSintomas; 
import com.example.bugdroid.menuexe.CursorAdapter.RegistosCursorAdapter; 
import com.example.bugdroid.menuexe.R; 
import com.example.bugdroid.menuexe.database.DAL; 
import com.example.bugdroid.menuexe.database.DBAccessMode; 

public class TabSintomas extends Fragment { 

    private DAL dal; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final RelativeLayout rootView = (RelativeLayout) inflater.inflate(R.layout.fragment_tab_sintomas, container, false); 

     dal = new DAL(getActivity()); 
     dal.connect(DBAccessMode.READ); 

     // Vai usar um cursor para percorrer a base de dados, usando o metodo "selectALLFromRegSintomas()" que vem da classe "DAL". 
     Cursor cursor = dal.selectALLFromRegSintomas(); 
     // é precisar declarar o layout do fragment com que estamos a trabalhar 
     final View v = inflater.inflate(R.layout.fragment_tab_sintomas, container, false); 

     // Declarar a listview onde vao aparecer os dados 
     ListView lv = (ListView) v.findViewById(R.id.listv); 
     // Declarar o adapter que define como aparecem os dados na listview 
     RegistosCursorAdapter todoAdapter = new RegistosCursorAdapter(getActivity(), cursor, 0); 
     // Ligar o adapter 
     lv.setAdapter(todoAdapter); 

     // Nos fragments é preciso sempre fazer return do layout que queremos mostrar, neste caso (fragment_tab_sintomas); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Intent intent = new Intent(getActivity(), DetalhesSintoma.class); 
       intent.putExtra("myExtras", position+1); 
       startActivity(intent); 
       //Toast.makeText(getActivity(),"clique", 
       //  Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     return v; 
    } 
} 

package com.example.bugdroid.menuexe.Activities; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.bugdroid.menuexe.R; 
import com.example.bugdroid.menuexe.database.DAL; 
import com.example.bugdroid.menuexe.database.DBAccessMode; 
import com.example.bugdroid.menuexe.database.DBContract; 

import org.w3c.dom.Text; 

public class DetalhesSintoma extends AppCompatActivity { 

    private DAL dal; 
    private TextView DataInicio; 
    private EditText HoraIncio; 
    private TextView DataFim; 
    private EditText HoraFim; 
    private TextView Intensidade; 
    private TextView Motivo; 
    private TextView Medicacao; 
    private Button Apagar; 
    private Button Concluido; 
    private int position; 

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

     DataInicio = (TextView) findViewById(R.id.DiaInicioText); 
     // HoraIncio = (EditText) findViewById(R.id.HoraInicioText); 
     DataFim = (TextView) findViewById(R.id.DiaFimText); 
     // HoraFim =() findViewById(R.id.HoraFimText); 
     Intensidade = (TextView) findViewById(R.id.IntensidadeText); 
     Motivo = (TextView) findViewById(R.id.MotivoText); 
     Medicacao = (TextView) findViewById(R.id.MedicacaoText); 
     Apagar = (Button) findViewById(R.id.btnApagar); 
     Concluido = (Button) findViewById(R.id.btnConcluido); 

     Intent intent = getIntent(); 
     position = intent.getIntExtra("myExtras", 0); 

     dal = new DAL(this); 
     dal.connect(DBAccessMode.READ); 

     Cursor res = dal.selectFromRegSintomasWhereId(position); 
     res.moveToFirst(); 
     StringBuilder datahora = new StringBuilder(); 
     while (!res.isAfterLast()) { 
      Intensidade.setText(res.getString(res.getColumnIndex(DBContract.Reg_sintomas.COL_Intensidade))); 
      String Data = res.getString(res.getColumnIndex(DBContract.Reg_sintomas.COL_D_Inicio)); 
      String Hora = res.getString(res.getColumnIndex(DBContract.Reg_sintomas.COL_H_Inicio)); 
      res.moveToNext(); 
      DataInicio.setText(datahora.append(Data + " ás " + Hora)); 
     } 

     Cursor res1 = dal.selectFromRegSintomasWhereId(position); 
     res1.moveToFirst(); 
     StringBuilder datahoraF = new StringBuilder(); 
     while (!res1.isAfterLast()) { 
      String Data = res1.getString(res1.getColumnIndex(DBContract.Reg_sintomas.COL_D_Fim)); 
      String Hora = res1.getString(res1.getColumnIndex(DBContract.Reg_sintomas.COL_H_Fim)); 
      res1.moveToNext(); 
      DataFim.setText(datahoraF.append(Data + " ás " + Hora)); 
     } 

     Cursor res2 = dal.selectFromMotivoSintomassWhereId(position); 
     res2.moveToFirst(); 
     StringBuilder sb = new StringBuilder(); 
     while (!res2.isAfterLast()) { 
      sb.append(res2.getString(res2.getColumnIndex(DBContract.Motivo_sintomas.COL_Motivo))); 
      res2.moveToNext(); 
     } 
     Motivo.setText(sb.toString()); 

     Cursor res3 = dal.selectMedicacaoWhereId(position); 
     res3.moveToFirst(); 
     StringBuilder sb2 = new StringBuilder(); 
     while (!res3.isAfterLast()) { 
      sb2.append(res3.getString(res3.getColumnIndex(DBContract.Medicacao.COL_Medicacao))); 
      res3.moveToNext(); 
     } 
     Medicacao.setText(sb2.toString()); 


     Apagar.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       dal.deleteFromRegSintomasWhereId(position); 
       Intent intent = new Intent(DetalhesSintoma.this, VerRegsSintomas.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

ここで私は上記のコードから関数を呼び出します:

Apagar.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      dal.deleteFromRegSintomasWhereId(position); 
      Intent intent = new Intent(DetalhesSintoma.this, VerRegsSintomas.class); 
      startActivity(intent); 
     } 
    }); 

このエラーを修正するにはどうすればよいですか?助言がありますか?

+0

を正確な問題に言及してください - 行がデータベースから削除されていないか、またはその他の問題があるかどうか? –

+0

行は削除されません。 –

+0

sqliteデータベースファイルをチェックして、その行が実際に削除されてもUIが更新されていないかどうか確認しましたか? –

答えて

3

DELETEコマンド、ないクエリです。
rawQuery()ではなく、execSQL()を使用して実行する必要があります。

execSQL()は何も返しません。

これは正常に動作します:

public void deleteFromRegSintomasWhereId(long id) 
{ 
    String sql = "DELETE FROM Reg_sintomas WHERE _ID = ?"; 
    String[] args = new String[]{id}; 
    this.db.execSQL(sql, args); 
} 
関連する問題