Android 从SQLite获取微调器中选定项的id,并将id值添加到SQLite表中

Android 从SQLite获取微调器中选定项的id,并将id值添加到SQLite表中,android,android-studio,spinner,android-spinner,Android,Android Studio,Spinner,Android Spinner,我是Android编程的新手。我试图用SQLite数据库中的leagues表中的league\u名称来填充微调器。然后,我想将微调器中所选项目的id的值传递给另一个方法addTeam,该方法将该值添加到另一个表的列中。目前,我已经能够在微调器中查看league\u名称,但我不确定如何获取所选项目的id。我已经能够将项目设置为id值,即1,2,3,4,并将该值传递给addTeam方法,但用户不知道他们正在选择哪个联赛 联赛表格示例: 下面是我的代码: public class add_team e

我是Android编程的新手。我试图用SQLite数据库中的
leagues
表中的
league\u名称来填充微调器。然后,我想将微调器中所选项目的
id
的值传递给另一个方法
addTeam
,该方法将该值添加到另一个表的列中。目前,我已经能够在微调器中查看
league\u名称
,但我不确定如何获取所选项目的
id
。我已经能够将项目设置为id值,即
1,2,3,4
,并将该值传递给
addTeam
方法,但用户不知道他们正在选择哪个联赛

联赛表格示例: 下面是我的代码:

public class add_team extends AppCompatActivity {

 //Calls DatabaseHelper Class
 DatabaseHelper myDb;

 EditText team_name, image;
 Button add_team, get_teams;
 Spinner league;

 ArrayList < String > leagues = new ArrayList < String > ();
 ArrayAdapter < String > adapter;

 int leagueIdParse = 0;

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

  myDb = new DatabaseHelper(this);

  team_name = (EditText) findViewById(R.id.edit_team_name);
  image = (EditText) findViewById(R.id.edit_image);

  add_team = (Button) findViewById(R.id.insertTeams);
  get_teams = (Button) findViewById(R.id.view_teams);

  league = (Spinner) findViewById(R.id.edit_league_id);

  adapter = new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1, leagues);

  addTeam();

  if (leagues == null) {
   leagues = new ArrayList < String > ();
  }
  leagues.clear();
  Cursor cursor = myDb.getAllLeagues();

  while (cursor.moveToNext()) {
   //Extract the data
   int leagueId = cursor.getInt(0);
   String leagueName = cursor.getString(1);

   leagues.add(leagueName);
  }

  league.setAdapter(adapter);

  league.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
   @Override
   public void onItemSelected(AdapterView < ? > parent, View view, int position, long id) {

    try {
     leagueIdParse = Integer.parseInt(parent.getItemAtPosition(position).toString());
    } catch (NumberFormatException nfe) {
     System.out.println("Could not parse " + nfe);
    }


   }

   @Override
   public void onNothingSelected(AdapterView < ? > parent) {

   }
  });

 }

 public void addTeam() {
  add_team.setOnClickListener(
   new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     Team team = new Team();
     team.setTeamName(team_name.getText().toString());
     team.setPath(image.getText().toString());
     team.setLeague_id(leagueIdParse);
     myDb.createTeam(team);

    }
   }
  );
 }

}

为此,您需要一个自定义适配器来填充微调器。。。在android中有一个
setTag(…)
选项。您可以使用关联的leage名称设置id,并且在item onclick事件中,您可以轻松地从getTag方法获取id

,


或者,在获取所选文本后,您需要再次点击数据库以检索相应的id。。。但我认为这不是一个好主意

为此,您需要一个自定义适配器来填充微调器。。。在android中有一个
setTag(…)
选项。您可以使用关联的leage名称设置id,并且在item onclick事件中,您可以轻松地从getTag方法获取id

,


或者,在获取所选文本后,您需要再次点击数据库以检索相应的id。。。但我认为这不是一个好主意

不,不,不,不要使用
ArrayAdapter
或任何自定义参数,而是使用
SimpleCorsorAdapter
,当在
onItemSelected
中选择
时,使用最后一个参数,甚至更好的方法是在
addTeam
中使用
getSelectedItemId()
,不,不,不要使用
ArrayAdapter
或任何自定义参数,改为使用
SimpleCorsOrAdapter
,当在
OnItems中选择时,使用最后一个参数,或者更好地使用
league.getSelectedItemId()
中的
addTeam
public class add_team extends AppCompatActivity {

 //Calls DatabaseHelper Class
 DatabaseHelper myDb;

 EditText team_name, image;
 Button add_team, get_teams;
 Spinner league;

 ArrayList < String > leagues = new ArrayList < String > ();
 ArrayAdapter < String > adapter;

 int leagueIdParse = 0;

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

  myDb = new DatabaseHelper(this);

  team_name = (EditText) findViewById(R.id.edit_team_name);
  image = (EditText) findViewById(R.id.edit_image);

  add_team = (Button) findViewById(R.id.insertTeams);
  get_teams = (Button) findViewById(R.id.view_teams);

  league = (Spinner) findViewById(R.id.edit_league_id);

  adapter = new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1, leagues);

  addTeam();

  if (leagues == null) {
   leagues = new ArrayList < String > ();
  }
  leagues.clear();
  Cursor cursor = myDb.getAllLeagues();

  while (cursor.moveToNext()) {
   //Extract the data
   int leagueId = cursor.getInt(0);
   String leagueName = cursor.getString(1);

   leagues.add(leagueName);
  }

  league.setAdapter(adapter);

  league.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
   @Override
   public void onItemSelected(AdapterView < ? > parent, View view, int position, long id) {

    try {
     leagueIdParse = Integer.parseInt(parent.getItemAtPosition(position).toString());
    } catch (NumberFormatException nfe) {
     System.out.println("Could not parse " + nfe);
    }


   }

   @Override
   public void onNothingSelected(AdapterView < ? > parent) {

   }
  });

 }

 public void addTeam() {
  add_team.setOnClickListener(
   new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     Team team = new Team();
     team.setTeamName(team_name.getText().toString());
     team.setPath(image.getText().toString());
     team.setLeague_id(leagueIdParse);
     myDb.createTeam(team);

    }
   }
  );
 }

}
public Cursor getAllLeagues() {
 //Create SQLiteDatabase instance
 SQLiteDatabase db = this.getReadableDatabase();

 String[] columns = {
  ID,
  LEAGUE_NAME
 };

 //Return query to return cursor object
 return db.query(LEAGUES_TABLE, columns, null, null, null, null, null);
}