我遇到onActivityResult
的问题。
当我开始的这些活动结束时,我使用startActivityForResult
来更新数据源来自本地数据库的某些元素。
它适用于两项活动,但由于某种原因,它不适用于最后一项活动。我对onActivityResult
提出的陈述没有触发。
这是第一个活动的代码,它调用其他活动:
public class ActivityEquipos extends AppCompatActivity {
public ArrayList<String> equipos = new ArrayList<>();
Spinner spEquipos;
ListView lvJugadores, lvPartidos;
Button btAddJugador, btAddPartido;
final public static int CODE_ADD_JUGADOR = 1, CODE_ADD_PARTIDO = 2, CODE_NEW_EQUIPO = 3;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_equipo, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.itNuevo:
Intent i = new Intent(getApplicationContext(), ActivityNewEquipo.class);
startActivityForResult(i, CODE_NEW_EQUIPO);
break;
case R.id.itVolver:
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_equipos);
spEquipos = findViewById(R.id.spEquipos);
lvJugadores = findViewById(R.id.lvJugadores);
lvPartidos = findViewById(R.id.lvPartidos);
btAddJugador = findViewById(R.id.btAddJugador);
btAddPartido = findViewById(R.id.btAddPartido);
cargaSpinner();
spEquipos.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
actualizarJugadoresPartidos(i);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CODE_ADD_JUGADOR && resultCode == RESULT_OK){
actualizarJugadoresPartidos(spEquipos.getSelectedItemPosition());
Toast.makeText(ActivityEquipos.this, "Jugador añadido con éxito.", Toast.LENGTH_SHORT).show();
} else if (requestCode == CODE_ADD_JUGADOR && resultCode == RESULT_CANCELED){
Toast.makeText(ActivityEquipos.this, "Añadido cancelado.", Toast.LENGTH_SHORT).show();
} else if (requestCode == CODE_ADD_PARTIDO && resultCode == RESULT_OK){
actualizarJugadoresPartidos(spEquipos.getSelectedItemPosition());
Toast.makeText(ActivityEquipos.this, "Partido añadido con éxito.", Toast.LENGTH_SHORT).show();
} else if (requestCode == CODE_NEW_EQUIPO && requestCode == RESULT_OK){
Log.d("carga", "precarga");
cargaSpinner();
Log.d("carga", "postcarga");
Toast.makeText(ActivityEquipos.this, "Equipo añadido con éxito.", Toast.LENGTH_SHORT).show();
} else if (requestCode == CODE_NEW_EQUIPO && requestCode == RESULT_CANCELED){
Toast.makeText(ActivityEquipos.this, "Añadido de equipo cancelado.", Toast.LENGTH_SHORT).show();
}
}
private void cargaSpinner(){
BaloncestoSQLiteHelper helper = new BaloncestoSQLiteHelper(this, "baloncesto", null, 7);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor c = db.rawQuery("SELECT * FROM equipos", null);
equipos.clear();
if (c.moveToFirst()){
do {
equipos.add(c.getString(0));
} while (c.moveToNext());
}
spEquipos.setAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.support_simple_spinner_dropdown_item, equipos));
db.close();
helper.close();
}
private void actualizarJugadoresPartidos(int i){
BaloncestoSQLiteHelper helper = new BaloncestoSQLiteHelper(ActivityEquipos.this, "baloncesto", null, 7);
final SQLiteDatabase db = helper.getWritableDatabase();
ArrayList<String> jugadores = new ArrayList<>();
final Cursor c = db.rawQuery("SELECT * FROM jugadores WHERE Nombre_equipo='" + equipos.get(i) + "'", null);
if (c.moveToFirst()){
do {
jugadores.add(c.getString(1));
} while (c.moveToNext());
}
ListJugadoresAdapter adapter = new ListJugadoresAdapter(ActivityEquipos.this, jugadores);
lvJugadores.setAdapter(adapter);
Log.d("tam", "" + jugadores.size());
//PARTIDOS
BaloncestoSQLiteHelper helperP = new BaloncestoSQLiteHelper(ActivityEquipos.this, "baloncesto", null, 7);
final SQLiteDatabase dbP = helperP.getWritableDatabase();
ArrayList<Partido> partidos = new ArrayList<>();
final Cursor cP = dbP.rawQuery("SELECT * FROM partidos WHERE equipo_local='" + equipos.get(i) + "' OR equipo_visitante='" + equipos.get(i) + "'", null);
if (cP.moveToFirst()){
do {
Partido partido = new Partido(cP.getString(1), cP.getString(2), cP.getInt(3), cP.getInt(4), cP.getString(5));
partidos.add(partido);
} while (cP.moveToNext());
}
ListPartidosAdapter partidosAdapter = new ListPartidosAdapter(ActivityEquipos.this, partidos);
lvPartidos.setAdapter(partidosAdapter);
dbP.close();
}
我从代码中删除了其他活动调用,以便更容易查看我遇到问题的哪个活动。
以下是第二项活动:
public class ActivityNewEquipo extends AppCompatActivity {
EditText etNombre, etConferencia, etDivision, etCiudad;
Button btAceptar, btCancelar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_equipo);
etNombre = findViewById(R.id.etNombreEquipo);
etConferencia = findViewById(R.id.etConferenciaEquipo);
etDivision = findViewById(R.id.etDivisionEquipo);
etCiudad = findViewById(R.id.etDivisionEquipo);
btAceptar = findViewById(R.id.btAniadirEquipo);
btCancelar = findViewById(R.id.btCancelarEquipo);
btCancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setResult(RESULT_CANCELED);
finish();
}
});
btAceptar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (etNombre.getText().toString().trim().isEmpty() ||
etCiudad.getText().toString().trim().isEmpty() ||
etConferencia.getText().toString().trim().isEmpty() ||
etDivision.getText().toString().trim().isEmpty()){
Toast.makeText(getApplicationContext(), "Campos vacíos. Imposible introducir", Toast.LENGTH_SHORT).show();
} else{
BaloncestoSQLiteHelper helper = new BaloncestoSQLiteHelper(getApplicationContext(), "baloncesto", null, 7);
final SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("Nombre", etNombre.getText().toString().trim());
values.put("Ciudad", etCiudad.getText().toString().trim());
values.put("Conferencia", etConferencia.getText().toString().trim());
values.put("Division", etDivision.getText().toString().trim());
try{
db.insert("equipos", null, values);
db.close();
setResult(Activity.RESULT_OK);
finish();
}catch (SQLiteConstraintException ex){
Toast.makeText(getApplicationContext(), "Nombre de equipo duplicado", Toast.LENGTH_SHORT).show();
}
}
}
});
}
答案 0 :(得分:2)
} else if (requestCode == CODE_NEW_EQUIPO && requestCode == RESULT_OK){
更改为
} else if (requestCode == CODE_NEW_EQUIPO && resultCode == RESULT_OK){
而且......你犯了两次错误!!!
如果你只是 - 只是一个测试 - 只把一个Toast放进去......