2014-04-06 3 views
0

ArrayList에 문자열 배열을 사용하여 간단한 listview를 채우려고합니다. 시도 할 때마다 강제로 닫습니다. 나는 Logcat에서 보았 듯이 배열에 올바른 문자열을 얻는 것을 안다. 나는 그것이 강제 폐쇄 이유를 알아낼 수 없습니다. 어쩌면 내가 ArrayAdapter에서 뭔가를 잊고있어 (그것은 나에게 맞아 보인다) 또는 어쩌면 내가 틀린 장소에 내 populate 방법을 가하고있어 ... 누군가가 나를 도울 수 있습니까?ListView에 ArrayList 채우기

public class SchedLayout extends Activity { 

public ArrayList<String> titleArray; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sched_layout_layout); 

    new doParse().execute(); 
} 

private class doParse extends AsyncTask<Void, Void, Void> { 
    File sdCard = Environment.getExternalStorageDirectory(); 
    File dir = new File(sdCard.getAbsolutePath() + "/directory/"); 
    File file = new File(dir, "file.html"); 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      FileInputStream input = new FileInputStream(file); 
      BufferedReader br = new BufferedReader(new InputStreamReader(
        input, "UTF-8")); 
      String line; 
      titleArray = new ArrayList<String>(); 
      while ((line = br.readLine()) != null) { 
       String html = line; 
       Document doc = Jsoup.parse(html); 
       Elements rels = doc.select("a[rel]"); 
       for (Element title : rels) { 
        String exclude = "Follow"; 
        if (title.attr("title").contains(exclude)) { 
         continue; 
        } 
        titleArray.add(title.attr("title")); 
        // Log.v("", title.attr("title")); <--works 
       } 
      } 
      br.close(); 
      input.close(); 
      populate(titleArray); <--does not work 
     } catch (FileNotFoundException e) { 
      //Never happens 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    private void populate(ArrayList<String> array) { 
     ListView showList = (ListView) findViewById(R.id.listView1); 
     ArrayAdapter<String> shows = new ArrayAdapter<String>(
       getApplicationContext(), 
       android.R.layout.simple_list_item_1, array); 
     showList.setAdapter(shows); 
    } 
} 

}

답변

4
onPostExecutepopulate 전화를 이동

. doInBackground 또는 기타 관련된 UI에 ListView을 수정할 수 없습니다.

@Override 
protected void onPostExecute(Void v) { 
    populate(titleArray); 
} 
+0

감사합니다. 나는 잘못된 방법으로 그 방법을 사용했을지도 모른다고 생각했습니다. :) – Grux