Estoy tratando de abrir una determinada URL pasada de actividad anterior con el navegador. Haga clic en el icono de redireccionamiento en el lado derecho, abra la página web esperada.

enter image description here

Aquí están mis códigos.

public class DetailedProduct extends AppCompatActivity {
    private Menu menu;
    private String itemId;
    private String itemUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d("DetailedProduct-LifeCycle","------------onCreate------------");
        setTheme(R.style.AppTheme);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detailed_product);
        Intent intent = getIntent();
        String itemId = intent.getStringExtra("itemId");
        String itemUrl = intent.getStringExtra("itemUrl");
        Log.d("itemUrl", itemUrl);
        ActionBar actionBar = getSupportActionBar();
//        actionBar.setDisplayHomeAsUpEnabled(true);
        setTitle(itemId);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        Log.v("Menu","----------menuCreate----------");
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.detail_menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.v("Menu", "-----------menuSelect---------");
        if(itemUrl==null){
            Log.v("Menu", "---------Cannot acquire predefined itemUrl---------");
        }
        else{
            Log.d("itemUrlInner", itemUrl);
        }

        switch(item.getItemId()){
            case R.id.redirect:

                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(this.itemUrl));
                startActivity(browserIntent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    ...
}

El problema es que itemUrl está null en el alcance de onOptionsItemSelected.

He asignado valor a itemUrl en onCreate. Sin embargo, como muestra el registro, es null.

enter image description here

Espero tu ayuda. ¡Muchas gracias! :-)

1
Zheyuuu 23 jun. 2020 a las 10:40

2 respuestas

La mejor respuesta

En el método onCreate estás usando una variable local.

private String itemUrl;

protected void onCreate(Bundle savedInstanceState) {
    ....
    //String itemUrl = intent.getStringExtra("itemUrl");  //It is a different variable!
    itemUrl = intent.getStringExtra("itemUrl");
}
0
Gabriele Mariotti 23 jun. 2020 a las 07:53

Está asignando valor a String itemUrl = intent.getStringExtra("itemUrl"); (variable local que finaliza su vida tan pronto como su alcance se perfecciona) pero lo lee desde this.itemUrl (campo de su entidad de alojamiento). Necesitas escribir y leer desde el mismo lugar.

0
ror 23 jun. 2020 a las 07:50