2011-03-25 4 views
0

나는 ByteArrayEntity 있습니다.자바는 다음과 같이 ByteArrayEntity에 개체를 주조 (안드로이드)는 ClassCastException

그러면 내가 수행해야하는 작업은 Objects 배열을 취하는 AsyncTask를 사용하여 요청한 다음 나중에 다양한 유형으로 캐스팅하는 것입니다. 사람이 설명 할 수 있다면 나중에 내 ByteArrayEntity 캐스팅 할 때 그러나, 나는 ClassCastException를 얻을 궁금 해서요?

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

    // Further code 


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

} 

나는 정말이 작업을 진행해야하지만 정말 완전히이 다시 구현하기 위해 현재 시간이 없어, 그래서 어떤 해킹이나 해결 방법을 주시면 감사하겠습니다. 나는 안드로이드 2.2

전체 목표는이 후 처리하는 서버에 다음, 안드로이드 카메라에서 내 HttpRequest 내 이미지 ByteArrayEntity A와 및 POSTsetEntity을 이미지를 촬영하는 것입니다 함께 일하고 있어요. 당신이 캐스팅 할 필요가 없도록

+0

당신은 [2] ByteArrayEntity입니다 HttpRequest를 100 % 확신이 있습니까? 나는 그것에 던지기를 막을 수있는 어떤 특별한 계급에 관해서는 아무것도 없다고 생각한다. – DHall

+0

나는 100 % 확신, 나는 [2] .getClass()과 출력 "org.apache.http.entity.ByteArrayEntity"HttpRequest에의에서 System.out.println했다입니다. 그것은 그것을 선언하는 것과 관련이 있습니까? 초기화 된 null 인 ByteArrayEntity 유형의 변수 만? 빈 바이트 []로 그것의 Object를 생성해야합니까? – Tim

답변

2

오히려 Object[]을 전달하고 배열의 위치에 따라 주조보다 왜 그냥 빈을 통과?

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 유형 시스템에 의존해야합니다. –