当前位置: 首页 > 知识库问答 >
问题:

onActivityResult在第二次调用时返回意图数据=null

冷正信
2023-03-14

我知道这个话题有答案,但行为和其他问题不一样。

@Override
public void onClick(View view) {
    int id = view.getId();
    switch (id) {

        case R.id.fab:
            Log.e(LOG_TAG, getActivity().toString());
            Intent intent = new Intent(getActivity(), AnadirAlimentoActivity.class);
            startActivityForResult(intent, 2);
            break;

    }
}

这个AnadirAlimentoActivity是一个完全按照预期工作的。

anadiralimentotivity:

在向列表中添加项目结束后,可以单击“后退”按钮,该按钮将触发此方法:

    @Override
public void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS, alimentosSeleccionados);
    setResult(RESULT_OK, intent);
    finish();
}

现在在片段中,使用正确的resultCode、requestCode和data激发OnActivityResult方法

片段:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 2) {
        ArrayList<Alimento> alimentos = data.getParcelableArrayListExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS);
        if (alimentos != null) {
            for (Alimento alimento : alimentos) {
                Log.e("alimento devuelto", alimento.getDescripcion() + " cantidad: " + String.valueOf(alimento.getCantidad())
                        + " proc: " + alimento.getProcedencia());
                mAlimentos.add(alimento);
            }
        }
        popularLista();
        isEnviarAlimento();
    } else {
        if (requestCode == 3) {
            if (data != null) {
                String remanente = data.getStringExtra(AppConstant.INSULINA_REMANENTE);
                if (remanente != null) {
                    _insulinaRemanente.setText(remanente);

                }
            }
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

那么问题是,当您单击另一个按钮时,启动另一个活动的按钮(也在片段中,但在AsyncTask onPostExecute方法中)

        @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        if (!aBoolean) {
            Toast.makeText(getActivity().getApplicationContext(), "Ha ocurrido un error por favor vuelve a intentarlo", Toast.LENGTH_LONG).show();
        } else {
            Intent intent = new Intent(getActivity(), MostrarInsulinaActivity.class);
            Log.e(LOG_TAG, getActivity().toString());
            startActivityForResult(intent, 3);
        }
        if (progressDialog != null && progressDialog.isShowing())
            progressDialog.dismiss();
    }

mostrarinsulinaactivity:

    @Override
public void onBackPressed() {
    super.onBackPressed();
    Intent _intent = new Intent();
    _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa");
    setResult(RESULT_OK, _intent);
    finish();

}

我正在执行与其他类相同的操作,希望与前一个类完全相同,但在finish()之后,get使用正确的requestCode调用片段中的OnActivyResult方法,但resultCode==0,data intent=NULL。

为什么会出现这种情况?是因为AsynTask?

非常感谢你

共有1个答案

张丰
2023-03-14

我想回答我自己的问题,只是为了那些可能面临同样问题的人…

问题是,在我的第二个活动中,我在设置我的意图之前调用了super.onbackpressed();,所以我做了以下更改:

@Override
public void onBackPressed() {
  Intent _intent = new Intent();
  _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa");
  setResult(RESULT_OK, _intent);
  finish();
  super.onBackPressed();
}
 类似资料:
  • 我正试着拍一张照片并把它保存到一个自定义的位置- onActivityResult()中的数据为空。我错过了什么?

  • 我正在开发一个android应用程序,它使用AsyncTasks从应用程序API获取JSON数据。当我启动我的应用程序时,一切都很顺利,应用程序从API中获取了正确的信息。 编辑:这是我获取数据的方式。 BufferedReader读取器=空;尝试{reader=new BufferedReader(new InputStreamReader(url.OpenStream(),“UTF-8”));

  • 问题内容: 我有两个相同的电话: 在msg1中,我得到了正确的期望值,但是msg2是一个空字符串。我没有设置 Out 消息,因此exchange In 消息应该仍然完整。请解释为什么会这样。 骆驼路线: 处理器仅包含上面的2条语句。route1中的处理是正确的,但是在route2中,我得到了描述的行为:第一个调用-有效字符串,第二个调用- 空字符串。所以我认为也许与HttpMessage转换有关。

  • 当我在输入元素中输入第一个字符时,我得到“空字符串”。 在我看来,我在输入元素中输入一个字符,触发“onChange”事件,运行函数getTitle,设置“title”变量,该变量连接到useState钩子,然后控制结果。按照这个推理,我希望输入第一个字符。相反,我得到的是“空字符串”。从第二个字符开始,控制台打印字符。 对于“onInput”,函数也会发生同样的情况。 如何解决这个问题,为什么会

  • 我有以下代码,它要求用户从照片应用程序中选择一个图像或通过相机应用程序捕捉一个图像: 和OnActivityResult的代码:

  • 我正在使用相机意图启动应用程序中的相机,但一旦意图被激发,就被激发,我甚至还没有拍摄到一张照片。 当我拍摄一张照片时,选择它并返回到我的活动中,根本不会被调用 下面是我如何发射相机 为什么只在相机意图启动后调用?