0

我有一个 ByteArrayEntity 如下:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
tempPic.compress(CompressFormat.PNG, 0, bos);
byte[] bitmapdata = bos.toByteArray();
photoByteArray = new ByteArrayEntity(bitmapdata);

tempPic是类型android.graphics.Bitmap

然后我要做的是使用 AsyncTask 发出请求,该请求接受一个数组,Objects然后我将其转换为它们的各种类型。但是,当稍后尝试投射我的 ByteArrayEntity 时,我得到一个ClassCastException,我想知道是否有人可以解释这一点?

protected HttpResponse doInBackground(Object... httpRequest) 
{
    ByteArrayEntity dataPhoto = null;

    // Further code


    if(myCondition)
    {
        dataPhoto = (ByteArrayEntity)httpRequest[2];
    }

}

我真的需要让它工作,但目前真的没有时间完全重新实现它,所以任何黑客或解决方法都会受到赞赏。我正在使用Android 2.2

整个目标是从 Android 相机拍摄图像,然后setEntity将我HttpRequest的图像ByteArrayEntityPOST我的图像传输到服务器,然后在服务器上进行处理。

4

2 回答 2

2

与其传递一个Object[]然后根据数组中的位置进行转换,为什么不只传递一个bean?

public class MyBean {
    private ByteArrayEntity myByteArrayEntity;
    private String someString;

    // getters and setters
}

无需铸造,更易于维护/扩展。

于 2011-03-25T16:06:51.830 回答
0

您可能会使用不同的类型参数化,AsyncTask这样您就不需要强制转换。如果您使用的是匿名类,那么:

new ArrayTask<ByteArrayEntity, Void, HttpResponse>() {
    ...

这样你就可以做到:

@Override
protected HttpResponse doInBackground(ByteArrayEntity... byteArrays) {
    ...
    dataPhoto = byteArrays[2];
    ...

如果您的论点确实打算是 type ByteArrayEntity

于 2011-03-25T15:41:42.903 回答