Android ArrayAdapter和ListView

Android ArrayAdapter和ListView,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我有一段代码,它必须获取一个listview并用数组适配器填充它: public class news extends ListActivity { public String[] titoli = new String[99]; public String[] descrizioni = new String[99]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns

我有一段代码,它必须获取一个listview并用数组适配器填充它:

public class news extends ListActivity {
public String[] titoli = new String[99];
public String[] descrizioni = new String[99];

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new connection().execute();
    System.out.println("prova1");
}

public class connection extends AsyncTask<Void, Void, Void> {
    public Void doInBackground(Void... params) {
        System.out.println("prova2");
        // All static variables
        final String URL = "http://www.messedaglia.it/index.php/archivio-news?format=feed&type=rss";
        // XML node keys
        final String ITEM = "item"; // parent node
        final String TITLE = "title";
        final String DESC = "description";
        Element e = null;
        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML
        Document doc = parser.getDomElement(xml); // getting DOM element
        NodeList nl = doc.getElementsByTagName(ITEM);

        // looping through all item nodes <item>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(TITLE, parser.getValue(e, TITLE));
            map.put(DESC, parser.getValue(e, DESC));

            // adding HashList to ArrayList
            menuItems.add(map);
        }
        System.out.println("prova3");
        for (int c = 0; c < nl.getLength(); c++) {
            e = (Element) nl.item(c);
            titoli[c] = parser.getValue(e, TITLE); // name child value
            descrizioni[c] = parser.getValue(e, DESC);
        }
        return null;
    }

    public void onPostExecute() {
        System.out.println("prova4");
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(news.this,
                android.R.layout.simple_list_item_1, titoli);
        System.out.println("prova5");
        ListView listView = (ListView) news.this
                .findViewById(android.R.id.list);
        listView.setAdapter(adapter);
    }
     }
 }
日志:

大多数人都说要添加setContentView()。我删除了它,因为添加它时会出现以下错误:

错误:java.lang.RuntimeException:您的内容必须具有id属性为“android.R.id.list”的ListView


这是因为未在组件上设置布局。首先需要调用
setContentView(R.layout.my\u great\u layout)
,然后才有意义调用
findViewById

确保布局中有一个带有android.R.id.listid的
ListView

  <ListView
      android:id="@android:id/list"
  .....

这是因为未在组件上设置布局。首先需要调用
setContentView(R.layout.my\u great\u layout)
,然后才有意义调用
findViewById

确保布局中有一个带有android.R.id.list
id的
ListView

  <ListView
      android:id="@android:id/list"
  .....

无法设置主布局

     public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
     setContentView(R.layout.main);    <----------------here
     new connection().execute();
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, titoli);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

setContentView(R.layout.main);无法设置主布局

     public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
     setContentView(R.layout.main);    <----------------here
     new connection().execute();
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, titoli);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);如日志中所示:

NullPointerException 02-07 13:38:36.020:E/AndroidRuntime(13803):
位于com.messedagliavr.messeapp.news.onCreate(news.java:33)

因为
titoli
数组为空。您正在使用AsyncTask获取
titoli
数组中的元素,然后只需移动适配器代码
onPostExecute
方法

和使用

ListView listView = (ListView) findViewById(android.R.id.list);
而不是

ListView listView = (ListView) findViewById(R.id.list);
若要获取
ListView
引用,必须在xml布局中将ListView id声明为
android:id=“@android:id/list”
,如果您在日志中使用:

NullPointerException 02-07 13:38:36.020:E/AndroidRuntime(13803):
位于com.messedagliavr.messeapp.news.onCreate(news.java:33)

因为
titoli
数组为空。您正在使用AsyncTask获取
titoli
数组中的元素,然后只需移动适配器代码
onPostExecute
方法

和使用

ListView listView = (ListView) findViewById(android.R.id.list);
而不是

ListView listView = (ListView) findViewById(R.id.list);

若要获取
ListView
引用,并且必须在xml布局中将ListView id声明为
android:id=“@android:id/list”
,如果您正在使用

,findViewById是否正常工作?ListView变量似乎为null。setContentView()函数在哪里?您正在尝试在setContentView()之前查找视图方法调用。@Francesco Ambrosini带有
ListView
-
ArrayAdapter
的简单示例。请尝试按照这个方法进行操作。下面是在调用“super.onCreate”后添加“setContentView”的示例。我移动了setContentView()在调用类news之前。我这样做是因为如果我没有得到这个错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView,它的id属性与findViewById一致工作?ListView变量似乎为null。您在哪里设置ContentView()函数?您正在尝试在setContentView()方法调用之前查找视图。@Francesco Ambrosini使用
ListView
-
ArrayAdapter
的简单示例。请尝试按照此操作。以下是在调用“super.onCreate”之后添加“setContentView”。我移动了setContentView()在调用类news之前。我这样做是因为如果我没有得到这个错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView。如果将titioli变量初始化为新字符串[99],它将如何为null甚至在构造函数运行之前?@AudriusMeškauskas在您扩展ListActivity时,不需要为ListActivity设置布局,也不需要使用setContentView(R.layout.main);如果您没有在布局上添加类似的内容?:public void onPostExecute(){ArrayAdapter=new ArrayAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,titoli);ListView ListView=(ListView)findViewById(android.R.id.list);ListView.setAdapter(adapter);}@FrancescoAmbrosini:像这样:
public void onPostExecute(){ArrayAdapter=new ArrayAdapter(news.this,android.R.layout.simple_list_list_item,titoli);ListView=(ListView)news.this.findViewById(android.R.id.list);ListView.setAdapter(adapter);}
@FrancescoAmbrosini:使用代码在ListView中使用ArrayList添加项目如果将titioli变量初始化为新字符串,该变量可以为空[99]甚至在构造函数运行之前?@AudriusMeškauskas在您扩展ListActivity时,不需要为ListActivity设置布局,也不需要使用setContentView(R.layout.main);如果您没有在布局上添加类似的内容?:public void onPostExecute(){ArrayAdapter=new ArrayAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,titoli);ListView ListView=(ListView)findViewById(android.R.id.list);ListView.setAdapter(adapter);}@FrancescoAmbrosini:像这样:
public void onPostExecute(){ArrayAdapter=new ArrayAdapter(news.this,android.R.layout.simple_list_list_item,titoli);ListView=(ListView)news.this.findViewById(android.R.id.list);ListView.setAdapter(adapter);}
@FrancescoAmbrosini:使用代码在ListView中使用ArrayList添加项目我移动了setCOntentView()在调用类news之前。我这样做是因为如果我不这样做,我会得到以下错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView。我移动了setCOntentView()在调用类news之前。我这样做是因为如果我没有得到这个错误:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView。我在调用类news之前移动了setCOntentView()。我这样做是因为如果我没有得到这个错误:java.lan