无法触发onActivityResult方法

时间:2018-02-21 15:03:01

标签: java android android-activity

我遇到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();
                }

            }
        }
    });
}

1 个答案:

答案 0 :(得分:2)

} else if (requestCode == CODE_NEW_EQUIPO && requestCode == RESULT_OK){

更改为

} else if (requestCode == CODE_NEW_EQUIPO && resultCode == RESULT_OK){

而且......你犯了两次错误!!!

如果你只是 - 只是一个测试 - 只把一个Toast放进去......