2016-11-30 11 views
0

このコードの何が問題なのか教えてください。列の選択と計算 - SQLite

public Cursor IMC(){ 
     Cursor cursor; 
     String[] campos = {"SELECT (peso/(altura*altura)) FROM medidas "}; 
     db = banco.getReadableDatabase(); 

     cursor = db.query(CriaBanco.TABELA_MEDIDAS, campos, null, null, null, null, null, null); 



     if(cursor!=null){ 
      cursor.moveToFirst(); 
     } 
     db.close(); 
     return cursor; 
    } 

は(ペソ/(アルトゥーラの*のAlturaの)私はTextViewの中にSELECT式の結果を表示しようとしている

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

      BancoController crud = new BancoController(getBaseContext()); 
      Cursor cursor = crud.IMC(); 

      String[] nomeCampos = new String[] {"SELECT (peso/(altura*altura) FROM medidas "}; 
      int[] idViews = new int[] {R.id.txtresultado_imc}; 



     } 

...列と "medidas" テーブルです「txtresultado_imc 」...テーブルコードの下

public class CriaBanco extends SQLiteOpenHelper { 

    private static final String NOME_BANCO = "banco.db"; 
    private static final int VERSAO = 1; 


    static final String TABELA_MEDIDAS = "medidas"; 
    static final String CODIGO = "codigo"; 
    static final String ALTURA = "altura" ; 
    static final String PESO = "peso" ; 
    static final String CINTURA = "cintura" ; 
    static final String PESCOCO = "pescoco" ; 
    static final String QUADRIL = "quadril" ; 
    static final String GRAU_ATIVIDADE = "grau_atividade" ; 


    public CriaBanco(Context context) { 
     super(context, NOME_BANCO, null, VERSAO); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 


     String medidas = "CREATE TABLE medidas (" 

        + "codigo integer primary key autoincrement," 
        + "altura integer," 
        + "peso integer," 
        + "cintura integer," 
        + "pescoco integer," 
        + "quadril integer," 
        + "grau_atividade num)"; 

     db.execSQL(medidas); 
    } 

TKS!

+2

あなたの質問には、このコードが何をすべきか、現在起こっていることについての説明が欠けていますので、これらの詳細を加えてください。例外がある場合はlogcatの詳細を追加してください。 –

+0

少なくとも1つの問題は、 ['query()'](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html)文の引数は、返すカラムのためのものです。 – PPartisan

+1

Pavneet Singh、 私は列 "peso"と "altura"の値を取って方程式(peso /(altura * altura)を実行してからtextviewに表示する必要があります...私は変わったが、それはまだ –

答えて

0

あなたの質問の閉じ括弧がありません。

使用この

"SELECT (peso/(altura*altura)) FROM medidas" 

代わりの

"SELECT (peso/(altura*altura) FROM medidas " 

その後TextViewにデータを設定するcursorの結果を使用します。

TextView tv = (TextView) findViewById(R.id.txtresultado_imc);  
// set result 
tv.setText(cursor.getString(cursor.getColumnIndex(0));) 

// Remove these below lines, I don't know what you are trying to achieve with them. They are looking unused and unnecessary 

String[] nomeCampos = new String[] {"SELECT (peso/(altura*altura) FROM medidas "}; 
int[] idViews = new int[] {R.id.txtresultado_imc}; 

あなたのコードを動作させるために、もう1つの変更が必要です。列の型に整数値のみを挿入できる間は、メソッドは文字列を受け入れます。

public String insereMedidas(String altura, String peso, String cintura, String pescoco, String quadril, String grau_atividade) 

これがあるべき -

public String insereMedidas(int altura, int peso, int cintura, int pescoco, int quadril, int grau_atividade) 

クロスチェックデータ型のすべての列で同じです。そして、あなたのEditTextからテキストを取得する間にそれをintに変換しますが、数値だけが入力として許可されていることを確認してください。例えばのために

- メソッドを挿入する値以上

int pesoValue = Integer.parseInt(Peso.getText().toString()); 

峠、すべての入力のために同じことを行います。

+0

....画面を開いたときに値が既に存在する必要があり、ボタンと呼ばれます。テキストビューは空白のままです... :( –

+0

@JuanNeresコマンドは動作しませんでした更新答え – Rahul

+0

を確認してください動作しません –

関連する問題