我的代码拒绝返回正确的requestCode所以我已经即兴创作了一下。它总是返回-1。
if(v.getId() == R.id.imageButton9)
{
request = 888;
Intent wpIntent = new Intent();
wpIntent.setType("image/*");
wpIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(wpIntent, "Select Picture"), SELECT_PICTURE);
}
else if(v.getId() == R.id.imageButton10)
{
String uri = null;
request = 999;
rtIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
if( uri != null)
{
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(uri));
}
else
{
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri)null);
}
this.startActivityForResult(rtIntent, SELECT_TONE);
}
我在代码的开头声明了两个变量:
protected static final int SELECT_PICTURE = 888;
protected static final int SELECT_TONE = 999;
这是onActivityResult:
public void onActivityResult(int resultCode, int requestCode, Intent data)
{
Toast.makeText(this, "onActivityResult: "+requestCode, Toast.LENGTH_SHORT).show();
if(request == 888)
{
Toast.makeText(this, "Picture Selection", Toast.LENGTH_SHORT).show();
Uri selectedImage = Uri.parse(data.getDataString());
wpPath = getPath(selectedImage);
Toast.makeText(this, "WP Path: "+wpPath, Toast.LENGTH_SHORT).show();
request = 0;
}
else if(request == 999)
{
Toast.makeText(this, "Tone Selection", Toast.LENGTH_SHORT).show();
Log.i("RT Picked is: ", rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString());
Uri uri = rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (uri != null)
{
rtPath = uri.toString();
Toast.makeText(this, "Ringtone Path: "+rtPath, Toast.LENGTH_SHORT).show();
request = 0;
}
}
}
这总是强制关闭。它给出了以下错误:
06-01 12:40:35.388:E / AndroidRuntime(7437):java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 999,result = -1,data = Intent {(有额外内容) )}} to activity {com.asim.autobot / com.asim.autobot.profile}:java.lang.NullPointerException
我被困住了。无法解决这个问题。
首先,为什么requestCode总是返回-1? 其次,为什么应用程序强制关闭rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);?
编辑: 完整的Logcat http://i47.tinypic.com/1zm2gww.jpg
它指向的行是Log.i(“RT Picked is:”,rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString());
答案 0 :(得分:2)
当您获得-1
的resultCode时,它的工作时间为RESULT_OK = -1
检查以下行:
rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString()
您有一个名为Intent data
的参数,您应该使用该参数而不是rtIntent
变量。您的rtIntent变量不会被修改,因此getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
可能会返回null。
答案 1 :(得分:0)
试试这段代码,
public void onClick(View v) {
switch (v.getId()) {
case R.id.imageButton9:
request = 888;
Intent wpIntent = new Intent();
wpIntent.setType("image/*");
wpIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(wpIntent, "Select Picture"), SELECT_PICTURE);
case R.id.imageButton10:
String uri = null;
request = 999;
rtIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
if( uri != null)
{
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(uri));
}
else
{
rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri)null);
}
this.startActivityForResult(rtIntent, SELECT_TONE);
break;
default:
break;
}
}
public void onActivityResult(int resultCode, int requestCode, Intent data)
{
Toast.makeText(this, "onActivityResult: "+requestCode, Toast.LENGTH_SHORT).show();
if(requestCode == SELECT_PICTURE)
{
Toast.makeText(this, "Picture Selection", Toast.LENGTH_SHORT).show();
Uri selectedImage = Uri.parse(data.getDataString());
wpPath = getPath(selectedImage);
Toast.makeText(this, "WP Path: "+wpPath, Toast.LENGTH_SHORT).show();
request = 0;
}
else if(requestCode == SELECT_TONE)
{
Toast.makeText(this, "Tone Selection", Toast.LENGTH_SHORT).show();
Log.i("RT Picked is: ", rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString());
Uri uri = rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (uri != null)
{
rtPath = uri.toString();
Toast.makeText(this, "Ringtone Path: "+rtPath, Toast.LENGTH_SHORT).show();
request = 0;
}
}
}