Android 将值传递给onActivityResult

Android 将值传递给onActivityResult,android,Android,我在向onActivityResult()方法传递值时遇到问题。这是我的密码: public class UserUploadActivity extends Activity{ String userID; Uri currImageURI; String path; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

我在向onActivityResult()方法传递值时遇到问题。这是我的密码:

public class UserUploadActivity extends Activity{

    String userID;
    Uri currImageURI;
    String path;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_upload);
        Bundle gotBundle = getIntent().getExtras();
        userID = gotBundle.getString("key");

        Intent selectImageIntent = new Intent();
        selectImageIntent.setType("image/*");
        selectImageIntent.setAction(Intent.ACTION_GET_CONTENT);

       startActivityForResult(Intent.createChooser(selectImageIntent, "Select Picture"), 1);
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (resultCode == RESULT_OK)
        {
            if (requestCode == 1) {
            // currImageURI is the global variable I’m using to hold the content:
                currImageURI = data.getData();
                path = getRealPathFromURI(currImageURI);
                //covert to base64 image
                Bitmap bitmapOrg = BitmapFactory.decodeFile(path);
                ByteArrayOutputStream bao = new ByteArrayOutputStream();
                bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);
                byte [] ba = bao.toByteArray();
            //pass the base64 code to string and send it to php file
                String ba1=Base64.encodeBytes(ba);


                ArrayList<NameValuePair> nameValuePairs = new

                        ArrayList<NameValuePair>();

                        nameValuePairs.add(new BasicNameValuePair("image",ba1));
                        nameValuePairs.add(new BasicNameValuePair("id",userID));


                        try{

                        HttpClient httpclient = new DefaultHttpClient();

                        HttpPost httppost = new

                        HttpPost("website link");

                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                        HttpResponse response = httpclient.execute(httppost);



                        }catch(Exception e){

                            Toast.makeText(getBaseContext(), "Hindi Gumana", Toast.LENGTH_LONG).show();

                            }


            }
        }
    }// end method onActivityResult

    public String getRealPathFromURI(Uri contentUri)
    {
        String [] proj={MediaStore.Images.Media.DATA};
        android.database.Cursor cursor = managedQuery( contentUri,
        proj,     // Which columns to return
        null,     // WHERE clause; which rows to return (all rows)
        null,     // WHERE clause selection arguments (none)
        null);     // Order-by clause (ascending by name)
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }//end method getRealPathFromURI


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_user_upload, menu);
        return true;
    }


    }
public类UserUploadActivity扩展活动{
字符串用户标识;
uricurrimageuri;
字符串路径;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u user\u upload);
Bundle-gotBundle=getIntent().getExtras();
userID=gotBundle.getString(“key”);
Intent selectImageIntent=newintent();
选择ImageIntent.setType(“image/*”);
选择imageintent.setAction(Intent.ACTION\u GET\u CONTENT);
startActivityForResult(Intent.createChooser(selectImageIntent,“selectpicture”),1);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据)
{
if(resultCode==RESULT\u OK)
{
if(requestCode==1){
//currImageURI是我用来保存内容的全局变量:
currImageURI=data.getData();
路径=getRealPathFromURI(currImageURI);
//转换为base64映像
位图bitmapOrg=BitmapFactory.decodeFile(路径);
ByteArrayOutputStream bao=新建ByteArrayOutputStream();
压缩(Bitmap.CompressFormat.JPEG,90,bao);
字节[]ba=bao.toByteArray();
//将base64代码传递给string并将其发送到php文件
字符串ba1=Base64.encodeBytes(ba);
ArrayList nameValuePairs=新建
ArrayList();
添加(新的BasicNameValuePair(“图像”,ba1));
添加(新的BasicNameValuePair(“id”,userID));
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新
HttpPost(“网站链接”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
}捕获(例外e){
Toast.makeText(getBaseContext(),“印地语Gumana”,Toast.LENGTH_LONG.show();
}
}
}
}//activityResult的end方法
公共字符串getRealPathFromURI(Uri contentUri)
{
字符串[]proj={MediaStore.Images.Media.DATA};
android.database.Cursor Cursor=managedQuery(contentUri,
proj,//返回哪些列
null,//WHERE子句;返回哪些行(所有行)
null,//WHERE子句选择参数(无)
null);//Order by子句(按名称升序)
int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
返回cursor.getString(列索引);
}//结束方法getRealPathFromURI
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u user\u upload,menu);
返回true;
}
}
但我唯一的问题是如何将userID的值传递给onActivityResult。已经发布了我的全部代码。我的问题是关于意图


我已经在onCreate方法中使用了toast来查看它的价值和工作状况。但每当我尝试将其传递给onActivityResult时,它总是返回null。

如果将userID设置为类范围的变量,那么如果覆盖它,onActivityResult应该可以访问它

public class Blah extends Activity {
    String userID;
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        // blah blah
        userID = "whatever value";
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        // use userID
    }

我想你是从另一个角度来看待这项活动的。您正在接收的捆绑包不包含我怀疑的“userId”令牌

userID=gotBundle.getString(“key”)

这是您使用用户ID的唯一位置。如果您收到“密钥”,您应该能够访问该值。
在上一行之后立即放置sysout或toast。

由于在您的意图开始获取内容时,您的进程有可能会终止,因此您需要将该信息保存在已保存的实例状态包中,以便在重新创建活动时将其取回

首先在onSaveInstanceState中保存用户ID

public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the userID.
    savedInstanceState.putString("myKey", userID);
    super.onSaveInstanceState(savedInstanceState);
}
然后在onCreate方法中获取userID,如下所示

if(savedInstanceState != null) {
       urerID = savedInstanceState.getString("myKey");
}

完成此操作后,您将能够在onActivityResult中获取用户ID。我和你一样有同样的问题,当我尝试这个的时候,它对我有效

我意识到这是一个非常古老的问题,但我认为这里的问题是传递给
onActivityResult()
的意图不一定与传递给
startActivityForResult
的意图相同。至少照相机的活动是这样的。(它为结果创建了一个新的意图。)

我找到的文档对此并不清楚,但在我看来,您可以通过Activity调用(并返回到ActivityResult的
中)传递的唯一信息是整数
requestCode
。如果不能捕获整数中的数据,可能可以将其用作调用类保存的映射的键

或者做我认为大多数人会做的事情:将
userId
放在活动的实例变量中,然后在
onActivityResult
中检索它。(如果调用者是活动,还应按照建议操作,并将字段值保存在“活动已保存”实例状态中。)


更新:

是否要在其他活动中使用用户id的值?否。仅在onActivityResult中使用。因为每当我尝试它时,它只会返回null。您是否也可以添加/显示将“key”值传递给UserUploadActivity的代码?您的意思是我可以将userID放入onActivityResult中?我已经试过了,但它只返回null。你能检查一下
gotBundle.getString(“key”)
是否不返回null吗?我已经用toast查看了它的值和工作情况。但每当我尝试将其传递给onActivityResult时,它总是返回null.cs