mercredi 25 novembre 2015

Application Crashes when i try to save data into DB [duplicate]

This question already has an answer here:

i've created an Android Application for swimming exercises. The user insert his name in the login screen when the app starts, and selecting "Create Training" in the sidebar menu application, starts to build his training.

The training is structured by number of exercises and the relative style. There are two buttons for save data and view the training. I have a problem when i try to save data and view the training in my SQLite Database.

I use some Intents to pass data values from class to class and maybe the app crashes for this reason. I have 4 java classes: Login, BuildTraining, DateTraining, Sidebar (menu)

public class Login extends AppCompatActivity {

public Button login;
public EditText name;
DatabaseHelper mydb;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    mydb = new DatabaseHelper(this);


    name = (EditText) findViewById(R.id.personName);
    login = (Button) findViewById(R.id.loginButton);


    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //get the name
            String nome = name.getText().toString();

            if (TextUtils.isEmpty(nome)) {
                name.setError("Error!");
                return;
            }
            //go to the Sidebar and pass the name
            Intent enter = new Intent(Login.this, SideBar.class);
            enter.putExtra("Nome",nome);
            startActivity(enter);
            //Stop Activity
            finish();

        }
    });
}

}

The sidebar it's a default activity on android studio so i past the code for the selection items on menu.

 public boolean onNavigationItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.trainings) {
        Intent a = new Intent(SideBar.this, ChooseLevelTraining.class);
        startActivity(a);
    } else if (id == R.id.create_training) {
        Intent createTraining = new Intent(SideBar.this, DateTraining.class);
        //get the name Login e pass to DateTraining
        String nome = createTraining.getStringExtra("Nome");
        createTraining.putExtra("Nome",nome);
        startActivity(createTraining);

    } 
    else if (id == R.id.logout) {
        Intent logout = new Intent(SideBar.this,Login.class);
        startActivity(logout);

    }

public class DateTraining extends AppCompatActivity {
public TextView dateTraining;
public Button  next;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_date_training);
    dateTraining=(TextView)findViewById(R.id.dateText);
    next = (Button)findViewById(R.id.nextBtn);

     next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent saveDate = new Intent(DateTraining.this,BuildTraining.class);
            Intent getNome = getIntent();
            final String nome = getNome.getStringExtra("Nome");
            String data = dateTraining.getText().toString();

            saveDate.putExtra("Data",data);
            saveDate.putExtra("Nome",nome);
            startActivity(saveDate);

        }
    });

}

}

public class BuildTraining extends AppCompatActivity {
public Button btnAggiungi;
public Button showTraining;
public Button btnDelete;

public EditText nvasche;
public EditText stile;

public DatabaseHelper mydb;


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

    stile = (EditText) findViewById(R.id.editStile);
    nvasche = (EditText) findViewById(R.id.editVasche);
    btnAggiungi = (Button) findViewById(R.id.btnAggiungi);
    showTraining = (Button) findViewById(R.id.btnViewTraining);
    btnDelete = (Button) findViewById(R.id.deleteBtn);
    addDataToDB();
    getTrainings();
    deleteData();


}

public void addDataToDB() {
    //get the username of DateTraining's intent
    Intent getNome = getIntent();
    final String nome = getNome.getStringExtra("Nome");
    //get data of DateTraining 's intent
    Intent getData = getIntent();
    final String data = getData.getStringExtra("Data");

    btnAggiungi.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //save datas on my db
            mydb.insertData(nome, data, nvasche.getText().toString(), stile.getText().toString());
            Toast.makeText(getApplicationContext(), "Training Inserted!",
                    Toast.LENGTH_LONG).show();

        }
    });
}

public void getTrainings() {
        /*recap training*/
    showTraining.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            /*Passo all'activity RecapTraining*/
            Cursor res = mydb.getTraining();
            if (res.getCount() == 0) {
                showMessageTraining("Error", "No training found!");
                return;
            }
            StringBuffer buffer = new StringBuffer();
            while (res.moveToNext()) {
                //valori allenamento
                buffer.append("Nome" + res.getString(1) + "\n");
                buffer.append("Data" + res.getString(2) + "\n");
                //valori esercizio
                buffer.append("Number exercices: " + res.getString(1) + "\n");
                buffer.append("Style: " + res.getString(2) + "\n");
            }
            showMessageTraining("Your training is:", buffer.toString());
        }
    });
}

public void deleteData() {
    btnDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Cursor res2 = mydb.deleteData();
            if (res2.getCount() == 0) {
                showMessageTraining("Error", "No trainings found!");
                return;
            }

        }
    });
}

public void showMessageTraining(String titolo, String message) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setTitle(titolo);
    builder.setMessage(message);
    builder.show();
}

}

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "swim.db";
public static final String TABLE_TRAINING = "ALLENAMENTO";
public static final String TABLE_EXERCISE = "ESERCIZIO";

public static final String ID = "ID";
public static final String NOME = "NOME";
public static final String DATA = "DATA";

public static final String NVASCHE = "NVASCHE";
public static final String STILE = "STILE";
public static final String ID_TRAINING = "IDTRAINING";


public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
    //SQLiteDatabase db = this.getWritableDatabase();
}


@Override
public void onCreate(SQLiteDatabase db) {

    String createTrainingSQL = "CREATE TABLE " + TABLE_TRAINING +
            "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            NOME + " TEXT NOT NULL," +
            DATA + " TEXT NOT NULL );";


    db.execSQL(createTrainingSQL);
    String createEsercizioSQL = "CREATE TABLE " + TABLE_EXERCISE +
            "(" + NVASCHE + " TEXT NOT NULL," +
            STILE + " TEXT NOT NULL," + "FOREIGN KEY (" + IDTRAINING + ") REFERENCES " + TABLE_TRAINING + "(" + ID + ");";

    db.execSQL(createEsercizioSQL);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXIST" + TABLE_TRAINING);
    db.execSQL("DROP TABLE IF EXIST" + TABLE_EXERCISE);
    onCreate(db);
}

public void insertData(String nome, String data, String nvasche, String stile) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    ContentValues cv2 = new ContentValues();
    cv.put(NOME, nome);
    cv.put(DATA, data);
    cv2.put(NVASCHE, nvasche);
    cv2.put(STILE, stile);
    db.insert(TABLE_TRAINING, null, cv);
    db.insert(TABLE_EXERCISE, null, cv2);
}

public Cursor getTraining() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor trainings = db.rawQuery("SELECT NOME,DATA,NVASCHE,STILE FROM TRAINING, EXERCISE", null);
    return trainings;
}

public Cursor deleteData() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor delete = db.rawQuery("DELETE * WHERE TRAINING.ID = EXERCISE.IDTRAINING", null);
    return delete;
}

}

I don't know where's the problem, can anyone please help me? Thanks!!

Aucun commentaire:

Enregistrer un commentaire