Записать поле идентификатора в другую таблицу для фильтрации ListView - PullRequest
0 голосов
/ 25 мая 2018

Я прошел через множество других постов по передаче первичного идентификатора из одной таблицы в новое действие, я пробовал несколько разных подходов, но безуспешно.В настоящее время я думал, что передаю его, но на самом деле ничего не появляется в следующем упражнении.Вот краткий обзор того, чего я хочу достичь.

Если пользователь создает новую лигу, он получает основной идентификатор (1).Пользователь нажимает на только что созданную Лигу, и теперь у него есть возможность создать Боулера.Конечно, Боулер может принадлежать ко многим лигам, поэтому я хочу иметь возможность записать Идентификатор Лиги в таблицу Боулера, и таким образом я могу сделать выбор только leagueId = 1 и отображать только боулеры, связанные с лигой.

MainActivity

//On Long Click On The RecyclerView Item An Alert Dialog Is Opened With The Option To Choose Edit/Delete
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(this,
                recyclerView, new RecyclerTouchListener.ClickListener() {
            @Override
            public void onClick(View view, final int position) {



                int leagueId = leaguesList.get( position ).getId();
                Intent myIntent = new Intent(getBaseContext(), Main2Activity.class);
                myIntent.putExtra("value1", leagueId);
                startActivity(myIntent);
                //Intent myIntent = new Intent(getApplicationContext(), BowlerActivity.class);
                //startActivity(myIntent);

            }

            @Override
            public void onLongClick(View view, int position) {
                showActionsDialog(position);
            }
        }));
    }

Main2Activity

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.league_id );
        Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
        setSupportActionBar( toolbar );

        String savedExtra = getIntent().getStringExtra( "value1" );
    TextView myText = (TextView) findViewById(R.id.tvLeagueId);
        final String s = myText.toString();
        myText.setText(savedExtra);


    }

}

Класс лиги

public static final String TABLE_NAME = "leagues";

        public static final String COLUMN_ID = "_id";
        public static final String COLUMN_NAME = "name";
        public static final String COLUMN_TIMESTAMP = "timestamp";

        private int id;
        private String name;
        private String timestamp;


        // Create table SQL query
        public static final String CREATE_TABLE =
                "CREATE TABLE " + TABLE_NAME + "("
                        + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                        + COLUMN_NAME + " TEXT,"
                        + COLUMN_TIMESTAMP + " DATETIME DEFAULT CURRENT_TIMESTAMP"
                        + ")";

        public League() {
        }

        public League(int id, String name, String timestamp) {
            this.id = id;
            this.name = name;
            this.timestamp = timestamp;
        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getTimestamp() {
            return timestamp;
        }

        public void setId(int id) {
            this.id = id;
        }

        public void setTimestamp(String timestamp) {
            this.timestamp = timestamp;
        }
}

Класс боулера

public static final String TABLE_NAME = "Bowlers";

public static final String COLUMN_ID = "_id";
public static final String COLUMN_LEAGUE_ID = "league_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_TIMESTAMP = "timestamp";

private int id;
private int league_id;
private String name;
private String timestamp;


// Create table SQL query
public static final String CREATE_TABLE =
        "CREATE TABLE " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + COLUMN_LEAGUE_ID + " INTEGER,"
                + COLUMN_NAME + " TEXT,"
                + COLUMN_TIMESTAMP + " DATETIME DEFAULT CURRENT_TIMESTAMP"
                + ")";

public Bowler() {
}

public Bowler(int id, int league_id, String name, String timestamp) {
    this.id = id;
    this.league_id = league_id;
    this.name = name;
    this.timestamp = timestamp;
}

public int getId() {
    return id;
}

public int getLeagueId() {return league_id;}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getTimestamp() {
    return timestamp;
}

public void setId(int id) {
    this.id = id;
}

public void setLeagueId(int league_id) {
    this.league_id = league_id;
}

public void setTimestamp(String timestamp) {
    this.timestamp = timestamp;
}

}

Любое руководство будет с благодарностью.

1 Ответ

0 голосов
/ 25 мая 2018

Я считаю, что ваша проблема в том, что вы отправляете целое число, но пытаетесь получить строку, когда вам нужно получить целое число.Таким образом, вы должны использовать: -

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.league_id );
        Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
        setSupportActionBar( toolbar );

        //String savedExtra = getIntent().getStringExtra( "value1" ); <<<< COMMENTED OUT
        String savedextra = String.valueOf(getIntent().getIntExtra("value1",-1)); //<<<< ADDED
    TextView myText = (TextView) findViewById(R.id.tvLeagueId);
        final String s = myText.toString();
        myText.setText(savedExtra);
    }
}

то есть String savedextra = String.valueOf(getIntent().getIntExtra("value1",-1)); вместо String savedExtra = getIntent().getStringExtra( "value1" );

  • Примечание -1 будет возвращаемым значением, если тамнет такого намерения, которое не соответствовало бы id (1 или больше), поэтому -1 указывает на недопустимый id .
    • Обратите внимание, что в идеале идентификаторы должны быть long , так как они могут быть до 9223372036854775807, а не 2147483647, что является ограничением int .
...