Autore Topic: Errore su db.insert  (Letto 431 volte)

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Errore su db.insert
« il: 18 Gennaio 2012, 13:34:11 CET »
0
Ciao a tutti,
ho cercato di adattare il contenuto del DbTutorial alla mia esigenza, principalmente popolando i record non con dati fissi (come fa il tutorial) ma con dati impostati in un layout.

Mi sembra di aver ripetuto tutto abbastanza correttamente ed in effetti l'unico errore ora presente è sulla linea db.insert
"Cannot refer to a non-final variable db inside an inner class defined in a different method"

Questo è il layout "insgio.xml"

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   android:background="@drawable/rts_background"
   >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/tessera" />


    <EditText
       android:id="@+id/etTessera"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="number" >

        <requestFocus />
    </EditText>


    <TextView
       android:id="@+id/textView2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/player" />

    <EditText
       android:id="@+id/etGiocatore"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="text" />

    <TextView
       android:id="@+id/textView3"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/hcp" />


    <EditText
       android:id="@+id/etHcp"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="number" />


    <Button
       android:id="@+id/bInsGio"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/insert" />


</LinearLayout>

Questa la classe del database "MyDatabase.java"

Codice (Java): [Seleziona]
package it.nextgolf.rts;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDatabase {

        SQLiteDatabase mDb;
        DbHelper mDbHelper;
        Context mContext;
        private static final String DB_NAME="garadb";
        private static final int DB_VERSION=1;
       
        public MyDatabase(Context ctx){
                mContext=ctx;
                mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);
        }
       
        public void open(){
                mDb=mDbHelper.getWritableDatabase();
        }
       
        public void close(){
                mDb.close();
        }
       
        public void insertPlayer(int tessera, String nome, int phcp, int tcolpi, int tpunti, int supar){
                ContentValues cv=new ContentValues();
                cv.put(PlayerMetaData.KEY_TESSERA, tessera);
                cv.put(PlayerMetaData.KEY_NOME, nome);
                cv.put(PlayerMetaData.KEY_PHCP, phcp);
                cv.put(PlayerMetaData.KEY_TCOLPI, tcolpi);
                cv.put(PlayerMetaData.KEY_TPUNTI, tpunti);
                cv.put(PlayerMetaData.KEY_SUPAR, supar);
                mDb.insert(PlayerMetaData.PLAYER_TABLE, null, cv);
        }
       
        public Cursor fetchPlayer(){
                return mDb.query(PlayerMetaData.PLAYER_TABLE, null, null, null, null, null, null);
        }
       
        static class PlayerMetaData {
                static final String PLAYER_TABLE = "player";
                static final String ID = "_id";
                static final String KEY_TESSERA = "tessera";
                static final String KEY_NOME = "nome";
                static final String KEY_PHCP = "phcp";
                static final String KEY_TCOLPI = "tcolpi";
                static final String KEY_TPUNTI = "tpunti";
                static final String KEY_SUPAR = "supar";
        }
       
        private static final String PLAYER_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "
                        + PlayerMetaData.PLAYER_TABLE + " ("
                        + PlayerMetaData.ID + "int primary key autoincrement, "
                        + PlayerMetaData.KEY_TESSERA + " integer not null, "
                        + PlayerMetaData.KEY_NOME + " text not null, "
                        + PlayerMetaData.KEY_PHCP + " integer not null, "
                        + PlayerMetaData.KEY_TCOLPI + " integer not null, "
                        + PlayerMetaData.KEY_TPUNTI + " integer not null, "
                        + PlayerMetaData.KEY_SUPAR + " integer not null);";
       
        private class DbHelper extends SQLiteOpenHelper {
               
                public DbHelper(Context context, String name, CursorFactory factory, int version){
                        super(context, name, factory, version);
                }
               
                @Override
                public void onCreate(SQLiteDatabase _db) {
                        _db.execSQL(PLAYER_TABLE_CREATE);
                }
               
                @Override
                public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion){
                       
                }
        }
}

Questa la Activity : "insGiocatori.java"

Codice (Java): [Seleziona]
package it.nextgolf.rts;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class insGiocatori extends Activity{

        Button myIns;
        int sqlTessera, sqlPhcp;
        String sqlNome;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);

                setContentView(R.layout.insgio);
               
                MyDatabase db=new MyDatabase(getApplicationContext());
                db.open();
               
                EditText Tessera = (EditText)findViewById(R.id.etTessera);
                sqlTessera = Integer.parseInt(Tessera.getText().toString());
                EditText Nome =  (EditText) findViewById(R.id.etGiocatore);
                sqlNome = Nome.getText().toString();
                EditText Phcp = (EditText) findViewById(R.id.etHcp);
                sqlPhcp = Integer.parseInt(Phcp.getText().toString());
               
                myIns = (Button) findViewById(R.id.bInsGio);

                myIns.setOnClickListener(new View.OnClickListener() {
                       
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                                       
                                int tessera=sqlTessera;
                                String nome=sqlNome;
                                int phcp=sqlPhcp;
                                int tcolpi=20;
                                int tpunti=30;
                                int supar=-1;
                               
                                db.insertPlayer(tessera, nome, phcp, tcolpi, tpunti, supar);
                        }
                });

        }

}

Grazie per l'aiuto.

Claudio

« Ultima modifica: 18 Gennaio 2012, 16:47:29 CET da tonyontravel »