2012-01-03 4 views
0

저는이 문제에 너무 오래 머뭇 거리면서 많은 유익을 얻었습니다.안드로이드 | AsyncTask - 코드가 잘못된 유형을 반환합니다.

이것은 AsyncTask로 처음 플레이 한 것이고 여기서 잘못하고있는 부분에 대해 혼란스러워합니다. Eclipse는 "이 메서드는 type 개체의 결과를 반환해야합니다."그러나, 나는 그것이 무언가를 완전히 놓치지 않는 한, 어떻게 그것이 아닌지 알 수 없다.

이미지를 다운로드하여 imageView1에 표시하려고합니다. (또한, 내 postExecute 코드를 올바르게 실행하고 있는지 시간을 절약 할 수 있다면 좋을 것입니다. :))

private class DownloadImageTask extends AsyncTask<String, Void, Object> { 
    protected Object doInBackground(String... urls) { 
     try { 
      URL url = new URL(urls[0]); 
      Object content = url.getContent(); 
      return content; 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    protected void onPostExecute(Object result) { 
     InputStream is = (InputStream) result; 
     Drawable d = Drawable.createFromStream(is, "src"); 
     ImageView imgView = (ImageView)findViewById(R.id.imageView1); 
     imgView.setImageDrawable(d); 
    } 
} 

답변

2

당신은 그래서 당신의 코드는 다음과 같은 아주 쉽게되어야 AsynTask에 문자열 (URL)를 전달하려는 생각

+0

아, 그 말이 맞습니다! 내가 집에 돌아와 결과를 게시하자마자 이걸 시험해볼거야, 고마워! –

+0

이것은 오류를 없앴습니다. 감사합니다! –

0

코드는 다음과 같아야합니다 ..

private class DownloadImageTask extends AsyncTask<String, Void, String> {//Notice i changed the Void, and String around in the parameters 
protected Object doInBackground(String... urls) { 
    try { 
     URL url = new URL(urls[0]); 
     Object content = url.getContent(); 
     return content; 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
protected void onPostExecute(String result) { 
    InputStream is = (InputStream) result; 
    Drawable d = Drawable.createFromStream(is, "src"); 
    ImageView imgView = (ImageView)findViewById(R.id.imageView1); 
    imgView.setImageDrawable(d); 
} 

}

편집 :

Object를 String으로 변경했습니다. 이 객체가 반환하려고하는 객체입니까? 그것이 왜 예외를 캐치 할 때 당신은 아무 것도 반환하지 않은

private class DownloadImageTask extends AsyncTask<String, Void, Void> 
    { 

     @Override 
     protected Void doInBackground(String... urls) { 
      try { 
        URL url = new URL(urls[0]); 
        Object content = url.getContent(); 
        return content; 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      InputStream is = (InputStream) result; 
      Drawable d = Drawable.createFromStream(is, "src"); 
      ImageView imgView = (ImageView)findViewById(R.id.imageView1); 
      imgView.setImageDrawable(d); 
     } 
    } 
+0

고마워! 하지만 이제는 "AsyncTask .doInBackGround (Void)"을 구현해야한다는 오류가 발생합니다. - 입력에 감사하지만 http://developer.android를 따르지 않는 것 같습니다. co.kr/reference/android/os/AsyncTask.html # execute (Params ...); 또는 나는 아직도 무엇인가 놓치고 있냐? 감사합니다. –

+0

내 편집을 확인하십시오 –

1

는 이잖아 "이 메서드는 개체 유형의 결과를 반환해야합니다."라는 메시지가 표시됩니다. 개체를 반환하거나 예외를 catch하는 동안을 반환하십시오.

만약 당신이 postexecute 방법보다 drawable을 얻는다면 말이 맞습니다.

코드는 다음과 같아야합니다

private class DownloadImageTask extends AsyncTask<String, Void, Object> { 
      protected Object doInBackground(String... urls) { 
       try { 
        URL url = new URL(urls[0]); 
        Object content = url.getContent(); 
        return content; 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
        return null;//added 
       } catch (IOException e) { 
        e.printStackTrace(); 
        return null;//added 
       } 
      } 
      protected void onPostExecute(Object result) { 
       InputStream is = (InputStream) result; 
       Drawable d = Drawable.createFromStream(is, "src"); 
       ImageView imgView = (ImageView)findViewById(R.id.imageViewMaricoLogo); 
       imgView.setImageDrawable(d); 
      } 
     } 
1

귀하의 doInBackground() 당신이 오류가 발생하는 이유 아무것도 반환하지 않습니다, 그건. 이것은 이전에 나에게 일어났습니다. onPostExecute 또는 null에서 사용할 Object를 반환하도록 설정하면 제대로 작동합니다. 행운을 빌어 요

관련 문제