0

私のコードは正しい 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);
    }

コードの先頭で 2 つの変数を宣言しました。

    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 { (エクストラあり) }}アクティビティ {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()); です。

4

2 に答える 2

2

のresultCodeを取得すると、次の-1ように機能しましたRESULT_OK = -1

次の行を確認します。

rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString()

呼び出されたパラメーターがIntent dataあり、変数の代わりにそれで作業する必要がありますrtIntent。rtIntent 変数は変更されないため、getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)おそらく null が返されます。

于 2012-06-01T09:38:57.527 に答える