lundi 14 mars 2016

Android - has_many and belongs_to relation shows only one of has_many

I have table Recepit and Logs and I created third table in which I save ID-s of Recepit and Logs. One recepit can have many logs.

So when I create new recepit, and then 7 logs it shows me only last one.

Don't know what went wrong.

here is Create method for Logs, Recepit and RecepitAndLogs.

String CREATE_LOGS_TABLE = "CREATE TABLE " + TABLE_LOGS + " (" +
                KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                KEY_CREATED_AT + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP,"+
                KEY_PLATENUMBER + " TEXT, " +
                KEY_SORT + " TEXT, "+
                KEY_GRADE+ " TEXT, "+
                KEY_DIAMETER + " INTEGER, " +
                KEY_LENGTH + " INTEGER);";
String CREATE_RECEPITS_TABLE = "CREATE TABLE " + TABLE_RECEPIT + " (" +
                RECEPIT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                RECEPIT_PLACE + " TEXT, " + RECEPIT_SHIPPING + " TEXT, " +
                RECEPIT_WAREHOUSE + " TEXT, " + RECEPIT_CARRIER + " TEXT, " +
                RECEPIT_LICENCE + " TEXT, " + RECEPIT_DRIVER + " TEXT, " +
                RECEPIT_CUSTOMER + " TEXT, " + RECEPIT_DEST_WAREHOUSE + " TEXT, " +
                RECEPIT_EMPLOYEE + " TEXT, " +
                RECEPIT_CREATED_AT + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP);";    
String CREATE_LOGS_BELONGS_TO_RECEPITS_TABLE = "CREATE TABLE " + TABLE_LOGS_BELONGS_TO_RECEPIT + " (" + MRECEIPT_ID + " INTEGER, " +
                MKEY_ID + " INTEGER, FOREIGN KEY("+ MRECEIPT_ID +") REFERENCES "+ TABLE_RECEPIT + "("+ RECEPIT_ID +"), FOREIGN KEY("+ MKEY_ID +") REFERENCES "+ TABLE_LOGS +"("+ KEY_ID +"));";

I'm sending onClick list item RecepitID via Intent

//sending RecepitId via intent form DisplayRecepit activity
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  Intent intent = new Intent(DisplayRecepit.this, DisplayLogs.class);
  intent.putExtra("recepitID", recepitList.get(position).getId());
  startActivity(intent);
  }
});

//Here I'm recieved "recepitID" and passing it to dbHandler method to get all logs.
final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID"));
dbHandler = new LogsDBHandler(this);
ArrayList<Logs> logsList = dbHandler.getAllLogs(forwardedId);

Here is my dbHandler method for getting all logs:

// passing the Id here and getting all logs with recepitID
    public ArrayList<Logs> getAllLogs(long id) {
        ArrayList<Logs> logList = new ArrayList<Logs>();
        String selectQuery = "SELECT * FROM " + TABLE_LOGS + " WHERE " + KEY_ID  + " IN " + "(SELECT " + KEY_ID + " FROM " + TABLE_LOGS_BELONGS_TO_RECEPIT + " WHERE " + RECEPIT_ID + " =? )";

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, new String[]{String.valueOf(id)});

        //going throug all rows and adding it to list
        if (cursor.moveToFirst()) {
            do {
                Logs log = new Logs();
                log.setId(cursor.getLong(0));
                log.setCreatedAt(cursor.getString(1));
                log.setPlate_number(cursor.getString(2));
                log.setSort_id(cursor.getString(3));
                log.setGrade(cursor.getString(4));
                log.setDiameter(cursor.getString(5));
                log.setLength(cursor.getString(6));
                logList.add(log);
            }while (cursor.moveToNext());
        }

        return logList;
    }

When I create 5-6 recepits and then many logs for each it only shows me last log.

Question is why I'm not getting many logs for one recepit?

Aucun commentaire:

Enregistrer un commentaire