2015-05-06 2 views
-1

Я просто не могу заставить его работать, я пробовал много разных вещей, синтаксический анализ работает отлично и возвращает список заголовков в arraylist, и я не могу получить их, чтобы просмотреть в ListView. Вот код;Отображение ArrayList <Strings> или List <Strings> в ListView

/** 
* Created by Matt on 4/21/2015. 
*/ 
public class Discussion_Fragment extends Fragment { 
View rootview; 
ListView listView; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    rootview = inflater.inflate(R.layout.discussion_layout, container, false); 
    ArrayList<String> titles = new ArrayList<String>(); 
    listView = (ListView) rootview.findViewById(R.id.listView1); 
    parse(getHTTP("https://www.reddit.com/r/DotA2.json?limit=10")); 

    for(int i=0;i<titles.size();i++){ 
     titles.add(titles.get(i)); 
    } 

    ArrayAdapter saAdapter = new ArrayAdapter(getActivity(), R.layout.discussion_layout, titles); 

    listView.setAdapter(saAdapter); 

    return rootview; 
} 
public static String getHTTP(String urlToRead) { 

    URL url; 
    HttpURLConnection conn; 
    BufferedReader rd; 
    String line; 
    String result = ""; 
    boolean response = false; 
    while (!response) 
    { 
     try { 
      url = new URL(urlToRead); 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setRequestMethod("GET"); 
      rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      while ((line = rd.readLine()) != null) { 
       result += line; 
      } 
      rd.close(); 
      response = true; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      try { 
       Thread.sleep(600); 
      } catch (InterruptedException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return result; 
} 
public static List<String> parse(String httpResponse) 
{ 
    ArrayList<String> titles = new ArrayList<String>(); 
    try { 
     JSONObject obj = new JSONObject(httpResponse); 
     //JSONObject posts = obj.getJSONObject("kind"); 
     JSONObject posts1 = obj.getJSONObject("data"); 
     JSONArray posts2 = posts1.getJSONArray("children"); 


     for (int i = 0; i < posts2.length(); i++) { 
      JSONObject test = posts2.getJSONObject(i); 
      JSONObject test1 = test.getJSONObject("data"); 
      Object test2 = test1.get("title"); 
      titles.add(test2.toString()); 
     } 
    } 
    catch(Exception e) { 
     e.printStackTrace(); 
    } 
    return titles; 
} 
} 

ответ

5

Вы должны сделать как

List<String> titles = parse(getHTTP("https://www.reddit.com/r/DotA2.json?limit=10")); 

Как parse(...) возврата метода List<String>

+0

Привет, спасибо, но я изменил это, и теперь приложение просто зависает/попадает в бесконечный цикл, когда я нажимаю фрагмент обсуждений, и я не могу сказать, что это за ошибка: s – mattz330

+0

@MatthewWren вы можете использовать это код в [UIThread] (http://stackoverflow.com/questions/3652560/what-is-the-android-uithread-ui-thread) – Gattsu

+1

@MatthewWren Для этого вы должны использовать 'AsyncTask'. –

1

заменить это:

parse(getHTTP("https://www.reddit.com/r/DotA2.json?limit=10")); 

for(int i=0;i<titles.size();i++){ 
    titles.add(titles.get(i)); 
} 

с этим:

titles = parse(getHTTP("https://www.reddit.com/r/DotA2.json?limit=10")); 
+0

Привет, спасибо, но я изменил это, и теперь приложение просто зависает/попадает в бесконечный цикл, когда я нажимаю фрагмент обсуждений, и я не могу сказать, что такое ошибка ...: s – mattz330

+0

Причина в том, что вы извлекаете данные из Интернета в UIThread, который блокирует операции ввода-вывода. Используйте asynctask: http://developer.android.com/reference/android/os/AsyncTask.html добавьте вышеприведенную строку внутри функции doInBackground и другую работу внутри onPostExecute –

0

Переместите getHTTP() в AsynTask, когда вы извлекаете данные в основной поток. Сделайте это в фоновом режиме.