代码之家  ›  专栏  ›  技术社区  ›  Trast

无法触发onActivityResult方法

  •  0
  • Trast  · 技术社区  · 8 年前

    我对 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 回复  |  直到 8 年前
        1
  •  2
  •   greenapps    8 年前
    } else if (requestCode == CODE_NEW_EQUIPO && requestCode == RESULT_OK){
    

    更改为

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

    和你犯了两次错误!!!

    如果你——作为一个测试——只在里面放了一片吐司。。。