2012-11-17 2 views
1

그냥 작동하지 않는 코드가 있습니다! AsyncTask는 TreeMap을 반환해야합니다. < Integer, List < String>> 그러나 로깅을 통해 보면 그렇지 않습니다. 그냥 붙어있어! "... 반환 따옴표"내가 내를 볼 수있는 로그 캣을 통해AsyncTask가 TreeMap을 반환하지 않습니다.

private class ParseSite extends 
     AsyncTask<String, Void, Map<Integer,List<String>>> { 
    Map<Integer,List<String>> quotes; 
    List<String> tmpInfo; 
    List<String> tmpText; 

    @Override 
    protected Map<Integer,List<String>> doInBackground(String... arg) { 
     // List<String> output = new ArrayList<String>(); 

     quotes = new TreeMap<Integer,List<String>>(); 

     try { 
      HTMLHelper hh = new HTMLHelper(new URL(arg[0])); 
      List<TagNode> qText = hh.getContentByClass("content"); 
      Logger.l(Logger.TAG_DBG, "GOT qText"); 
      List<TagNode> qInfo = hh.getContentByClass("sm"); 
      Logger.l(Logger.TAG_DBG, "GOT qInfo"); 
      tmpInfo = new ArrayList<String>(); 
      tmpText = new ArrayList<String>(); 

      for (Iterator<TagNode> iterator = qText.iterator(); iterator 
        .hasNext();) { 
       TagNode divElement = iterator.next(); 
       String tmp = divElement.getText().toString(); 
       tmp = tmp.replaceAll("&lt;", "<"); 
       tmp = tmp.replaceAll("&gt;", ">"); 
       tmp = tmp.replaceAll("&quot;", "" + (char) 34); 

       tmpText.add(tmp); 
       Log.i(Logger.TAG_INF, tmp); 
      } 
      Logger.l(Logger.TAG_DBG, "tmpText[" + tmpText.size() + "] Filled"); 
      quotes.put(1, tmpText); 
      for (Iterator<TagNode> iterator = qInfo.iterator(); iterator 
        .hasNext();) { 
       TagNode divElement = iterator.next(); 
       String tmp = divElement.getText().toString(); 

       tmpInfo.add(tmp); 
       Log.i(Logger.TAG_INF, tmp); 
      } 
      Logger.l(Logger.TAG_DBG, "tmpInfo[" + tmpInfo.size() + "] Filled "); 
      quotes.put(2, tmpInfo); 
      Logger.l(Logger.TAG_DBG, "quotes Filled"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Logger.l(Logger.TAG_DBG, "Returning quotes..."); 
     return quotes; 
    } 

    @SuppressWarnings("unused") 
    protected void onPostExecute(List<String> output) { 
      pd.dismiss(); 
      Logger.l(Logger.TAG_DBG, "Setting adapter..."); 
      listView.setAdapter(new QuotesArrayAdapter(HTMLParser.this, 
       quotes)); 
     } 
} 

하지만 난 수 "어댑터 설정 ..."하고해서 ProgressDialog의 PD : 여기

코드입니다 해고하지 않습니다.

BTW 죄송합니다. 난 러시아인이야.

+0

'AsyncTask'의 리턴 타입은'Map >입니다 만'onPostExecute'에 대해 선언 한 매개 변수는'List output'입니다. Niek이 말했듯이, 컴파일러는 올바른 매개 변수 유형이 없기 때문에'onPostExecute (...) '메소드가 사용되지 않는다고 경고합니다. – Squonk

답변

4

컴파일러는 경고,하지만 당신은 그것을 무시할 수 : 당신이 잘못 선언했기 때문에

@SuppressWarnings("unused") 

컴파일러는이 방법이 사용되지 않습니다 알고있다.

@Override 
protected void onPostExecute(Map<Integer,List<String>> output) { 
     pd.dismiss(); 
     Logger.l(Logger.TAG_DBG, "Setting adapter..."); 
     listView.setAdapter(new QuotesArrayAdapter(HTMLParser.this, 
      quotes)); 
} 

공지 사항 매개 변수의 유형 및 @Override 주석 :로 변경합니다. 이 주석을 사용하면 그렇지 않은 경우 오류를 표시하여 메소드를 올바르게 오버로드 할 수 있습니다.

+0

OMG 작동합니다! 고마워요! 내가 틀린 것을 알아 내려고 거의 3 시간을 보냈다! 그리고 저는 컴파일러가 그 방법이 사용되지 않는다고 말한 이유를 궁금해했습니다. 감사합니다. – DrBigNik

+0

당신은 환영합니다. :) 그래서 당신의 메소드가 호출되도록 오버라이드하는 메소드에 항상 @ @ Override' 주석을 추가하십시오. 또한, 당신이 대답을 받아 들일 수 있다면, 그게 좋을거야 :) – nhaarman

+0

예, 죄송합니다 깜빡 =) – DrBigNik

관련 문제