【问题标题】:Android, assigning value to variables in onActivityResult method?Android,在 onActivityResult 方法中为变量赋值?
【发布时间】:2012-04-09 03:30:59
【问题描述】:

我正在尝试从我的 onActivityResult 方法中检索一些信息,在我的情况下是用户在子活动中选择的图片,我相信它工作正常,我遇到的问题是当我尝试分配它时图片(以字节数组的形式)到我在主要活动中拥有的变量。我正在尝试在 onClick 方法中使用该变量,但由于某种原因,当我尝试使用该变量时,它的值始终为空。 会发生什么? 这是代码:

poptions.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int pos, long id) {
            final Intent i;
            switch(pos){
            // Adjunta imagen
            case 0:
                i = new Intent(Intent.ACTION_GET_CONTENT);
                i.setType("image/jpeg");
                startActivityForResult(i,1);
                //Toast.makeText(view.getContext(), "MIERDA!!", 30).show();
                break; // more cases below, not relevant to my question....
                }
        }

    });

我的 onActivityResult 方法:

编辑:解决方案是改变

if(resultCode==1)

收件人:

if(resultCode==RESULT_OK)

原来,RESULT_OK 实际上等于 -1。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent pic){
    super.onActivityResult(requestCode, resultCode, pic);
    if(resultCode==1){

        Uri selectedpic = pic.getData();

        try {
            Bitmap bitmappic = MediaStore.Images.Media.getBitmap(
                    this.getContentResolver(), 
                    selectedpic);

            ByteArrayOutputStream picstream = new ByteArrayOutputStream();

            bitmappic.compress(Bitmap.CompressFormat.JPEG, 100, picstream);
            setPicture(picstream.toByteArray());

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

我的 onClickListener 方法,我尝试使用上面的 setPicture 方法设置的图片。

        btnSend.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                Bundle usrpostData = new Bundle();
                if(txtMsg.getText().toString().equals("")){
                    Toast.makeText(v.getContext(), "MSG", 10).show();
                }else{
                    String msg = txtMsg.getText().toString();
                    usrpostData.putString("message", msg);
                    if(getPicture()==null){
                        Toast.makeText(v.getContext(),"NULL",30).show();
                    }else{
                        try {
                            // do something with the picture...

                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }

        });

如您所见,我进行了一些测试,getPicture 方法总是返回 null,我尝试使用 .equals 而不是 ==,这会使我的应用程序崩溃。 任何帮助表示赞赏

【问题讨论】:

  • 你能发布你调用btnSend.onClickListener()的Activity方法吗?如果它在onCreate()中,那么你保存图片的原始Activity实例已经被销毁了。
  • @hopia 是的,我的 btnSend.onClickListener() 在我的 onCreate() 方法上,在我调用子活动的主要活动中。
  • 只是想确认一下,您确定您在 onActivityResult() 中检查了正确的参数吗?我认为应该是requestCode。 resultCode 通常返回 RESULT_OK、RESULT_CANCEL 等。认为您需要检查 requestCode。与 ure 查询无关:(
  • 你也可以把与setPicture和getPicture相关的所有代码都放上去吗?
  • @hopia 谢谢,我发现了问题,我检查 resultCode 为 1,当 RESULT_OK 实际上等于 -1 时,我更改了代码,现在图片不再为空,谢谢你顺便说一句,我怎样才能将其标记为已解决?没有真正的答案,只有你的 cmets..

标签: android variables variable-assignment subactivity


【解决方案1】:

解决办法是改变

if(resultCode==1)

到:

if(resultCode==RESULT_OK)

原来,RESULT_OK 实际上等于 -1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2017-11-18
    相关资源
    最近更新 更多