2013-02-15 3 views
0

У меня проблема с ListView, который не отображается. Я не получаю ошибки и фоновое изображение, а другой текст отображается, но ListView не отображается. Я не могу найти ошибку путем отладки.Почему мой ListView не отображается?

Любая подсказка, в чем проблема?

public class MainActivity extends Activity { 

    List<String> sermon; 
    List<String> links; 
    ArrayAdapter<String> adapter; 
    private ListView list; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     list = (ListView) findViewById(R.id.listView); 
     sermon = new ArrayList<String>(); 
     links = new ArrayList<String>(); 
     adapter = new ArrayAdapter<String>(MainActivity.this, 
         android.R.layout.simple_list_item_1, sermon);   

     new PostTask(this).execute("http://gibk.se/sample-page/predikningar/?podcast"); 
    } 

    public class PostTask extends AsyncTask<String, Long, String> { 

     private Context context; 

     public PostTask(Context context) { 
       this.context = context; 
     } 

     private InputStream getInputStream(URL url) { 
      try { 
       return url.openConnection().getInputStream(); 
      } catch (IOException e) { 
       return null; 
      } 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       String url = params[0]; 
       URL urls = new URL(url); 

       XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
       factory.setNamespaceAware(false); 
       XmlPullParser xmlParser = factory.newPullParser(); 

       xmlParser.setInput(getInputStream(urls), "UTF_8"); 

       boolean insideItem = false; 

       int eventType = xmlParser.getEventType(); 
       while (eventType != XmlPullParser.END_DOCUMENT) { 
        if (eventType == XmlPullParser.START_TAG) { 
          if (xmlParser.getName().equalsIgnoreCase("item")) { 
            insideItem = true; 
          } else if (xmlParser.getName().equalsIgnoreCase("title")) { 
            if (insideItem) 
              sermon.add(xmlParser.nextText()); 
         } else if (xmlParser.getName().equalsIgnoreCase("guid")) { 
            if (insideItem) 
              links.add(xmlParser.nextText()); 
          } 
        } else if (eventType == XmlPullParser.END_TAG 
            && xmlParser.getName().equalsIgnoreCase("item")) { 
          insideItem = false; 
        } 

        eventType = xmlParser.next(); 
       } 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (XmlPullParserException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 
    } 

    protected void onPostExecute(String result) { 
     list.setAdapter(adapter); 
     list.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> arg0, View v, int position, 
           long arg3) { 
        Uri uri = Uri.parse(links.get(position)); 
        String url = uri.toString(); 

        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setData(Uri.parse(url)); 
        startActivity(intent); 
       } 
     }); 
    } 
} 
+0

Можете ли вы разместить вывод логарифма, пожалуйста. – Kerry

ответ

0

У меня есть проблема с ListView, не отображаются. Я не получаю ошибка и фоновое изображение, а другой текст, но listLiew не отображается. Я не могу найти ошибку, дегустируя.

Если нет ошибок, так, скорее всего, может быть две причины:

Вы динамически добавляющие данные в ListAdapter так в onPostExecute() или onProgressUpdate() метод попытаться вызвать метод на ваш ListAdapter

adapter.notifyDataSetChanged(); 

Существует некоторая вероятность того, что ваш ListView некорректно обновлен, этот метод обеспечивает его.

Ваш ListView может быть пустым. Попробуйте записать XML parsing, правильно ли вы получаете значения.

+0

Да, это ошибка, но я получаю значения только от моего синтаксического анализа XML, когда я помещаю его в onCreate. Но как только я перехожу к методу doTnBackground, мой список становится пустым. Почему это так ? – Josef

+0

Как я написал, попробуйте войти, если вы получаете какое-либо значение из XML. Если есть ошибка, добавьте здесь logcat ... – Sajmon

+0

Нет значений из XML, boolean всегда false и ошибок в logcat. BUT url в отладке одобрен. И переменная evantType Variable является либо 2, либо 4 для каждого цикла – Josef

0

Комплект адаптера после AsyncTask отделка.

onPostExecute Метод

adapter = new ArrayAdapter<String>(MainActivity.this, 
      android.R.layout.simple_list_item_1, sermon); 
+0

Это делает любой различие – Josef

+0

Да, вы можете попробовать это. – rajeshwaran

+0

У меня не было никакого различия – Josef

0

Параметр, передаваемый по onPostExecute это получить от метода doInBackground. Поэтому вам, возможно, придется вернуться к проповеди от doInBackground. А также добавьте adapter.notifyDataSetChanged(); Это link может вам помочь.

Смежные вопросы