2011-03-25 8 views
0

私はByteArrayEntityを持っています。Javaは、次のようにByteArrayEntityにオブジェクトをキャスト(アンドロイド)のClassCastException

次に、Objectsの配列をとるAsyncTaskを使用して要求を行い、それを後でさまざまな型にキャストします。しかし、後でByteArrayEntityをキャストしようとすると、ClassCastExceptionとなり、誰かがこれを説明できるかどうか疑問に思っていましたか?

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

    // Further code 


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

} 

私は本当にこの作業を取得する必要がありますが、実際には完全にこれを再実装するために、現在の時間を持っていないので、任意のハッキングや回避策がいただければ幸いです。私は、全体の目的は、これは、その後に処理されているサーバーにPOST私のイメージをByteArrayEntityに私のHttpRequestsetEntity、その後、Androidのカメラからの画像を撮影することですアンドロイド2.2

で働いています。

+0

httpRequest [2]がByteArrayEntityですか?私はそれにキャストすることを防ぐことができる特定のクラスについては何もないと思います。 – DHall

+0

私は100%確信しています。httpRequest [2] .getClass()のSystem.out.printlnを実行し、 "org.apache.http.entity.ByteArrayEntity"を出力します。私はそれを宣言する方法とは何か?初期化されたnull型のByteArrayEntity型の単なる変数ですか?私は空のバイト[]でそれのオブジェクトを作成する必要がありますか? – Tim

答えて

2

Object[]を渡して配列の位置に基づいてキャストするのではなく、単にBeanを渡すのはなぜですか?

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

    // getters and setters 
} 

キャスティングが不要で、維持/拡張が容易です。

+0

これは、私のプロジェクトのこの段階では実用的なものより少し多くのリファクタリングを必要とします。私はこのアプローチを将来的には間違いなく考えますが、それは賢明です。しかし、なぜこのキャスティングに失敗したのかについての提案はありますか?それは本当に奇妙です。 – Tim

+0

@Timリファクタリングはそれほどかかりません。また、あなたの現在の問題を修正し、今後同様の問題を防ぐことができます。なぜあなたの現在のコードが失敗しているのかを知るために、配列内のオブジェクトを設定したコードをすべて見なければなりません。私はある時点でインデックスが間違っていると思います。しかし、私が言ったように、Beanよりもオブジェクトの配列をデバッグする方がはるかに難しいです。弾丸を噛んでリファクタリングをするほうがはるかに良いでしょう。最初にバージョンをソース管理に保存することを忘れないでください! –

+0

私はまだ鋳造がうまくいかない理由について完全に固執しています。私はこの方法で...私より先に長い週末を過ごした。私はこのプロジェクトに参加するほど勉強していますが、最初はこれらのコンセプトについては考えていなかったのは残念です。ありがとう。 – Tim

0

キャストする必要がないように、AsyncTaskという異なるタイプのパラメータを使用することがあります。あなたは、匿名クラスを使用している場合:

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

をあなたがすることができるようにするため:

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

をあなたの引数は実際にタイプByteArrayEntityであることが意図されている場合。

+0

これはうまくいくが、私の呼び出しはオブジェクトの配列をとる。なぜなら、私がコールするとき、配列の中の位置に応じて、いくつかの文字列とエンティティとマップを渡してから後でキャストするからだ。それらはすべて(文字列とマップ)動作しますが、ByteArrayEntityはキャストしません - アイデアですか? – Tim

+0

Yikes。この場合、dave.cが言うことを本当に行う必要があります。あなたはJava型システムに頼るべきです。 –

関連する問題