开发者

How to cast in IntentService::handleIntent the CustomResultReceiver passed as an intent extra

开发者 https://www.devze.com 2023-04-09 14:19 出处:网络
I am trying to cast the Intent::extraParcelable received, to my custom RestResultReceiver like this public class APIHttpV1Service

I am trying to cast the Intent::extraParcelable received, to my custom RestResultReceiver like this

public class APIHttpV1Service
    extends IntentService
{

    ...

    protected void onHandleIntent (Intent intent)
    {
        final int apiCall = intent.getIntExtra("uri");
        final RestResultReceiver resultReceiver = intent.getParcelableExtra(RestResultReceiver.EXTRA_ID_RESULT_RECEIVER);

    //  check if the uri is correct
        if( apiCall == -1)
        {
        //  TODO call failed as we didn't provide any URI
            resultReceiver.send(RestStatus.ERROR, Bundle.EMPTY);
        }

        ...

    }
}

and this is the RestResultReceiver

public class RestResultReceiver
    extends ResultReceiver
{
    private static final String TAG                     = "com...RestResultReceiver";
    public static final String EXTRA_ID_RESULT_RECEIVER = "com...RestResultRecevier.Receiver";

    private Receiver __mReceiver;

    public RestResultReceiver(Handler handler)
    {
        super(handler);
    }

    public void clearReceiver()
    {
        __mReceiver = null;
    }

    /**
     * Set the receiver
     * @param receiver the object getting called back using onReceiveResult
     */
    public void setReceiver( Receiver receiver )
    {
        __mReceiver = receiver;
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData)
    {
        if (__mReceiver != null)
        {
            __mReceiver.onReceiveResult(RestStatus.getEnum(resultCode), resultData);
        }
        else
        {
            Log.w(TAG, "Dropping result on floor for code " + resultCode + ": "
                    + resultData.toString());

        }
    }

    public void send(RestStatus resultStatus, Bundle resultData)
    {
        super.send(resultStatus.getCode(), resultData);
    }

    /**
     * Interface to implement for objects doing rest service call
     */
    public interface Receiver
    {
        public void onReceiveResult(RestStatus resultStatus, Bundle resultData);
    }
}

At runtime I have a java.lang.ClassCastException exception. I am just wondering why I can get my RestResultReceiver. If I use

final ResultReceiver resultReceiver = intent.getParcelableExtra(RestResultReceiver.EXTRA_ID_RESULT_RECEIVER);

it doesn't throw any error but 开发者_如何学CI can't call my custom send function obviously.

Any idea?

Thx a lot for any help you could provide :)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号