Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从ArrayList获取指定项<;对象>;(在由解析的XML数据填充的列表之后)_Android_Xml_Arraylist - Fatal编程技术网

Android 从ArrayList获取指定项<;对象>;(在由解析的XML数据填充的列表之后)

Android 从ArrayList获取指定项<;对象>;(在由解析的XML数据填充的列表之后),android,xml,arraylist,Android,Xml,Arraylist,我从这里得到了解析XML所需的代码: 我对代码做了一些修改,下面是代码: public class CobaXMLPullParser extends Activity { protected static final int DIALOG_KEY = 0; ListView mListView; ProgressDialog mProgressDialog; @Override public void onCreate(Bundle savedInstanceState) { su

我从这里得到了解析XML所需的代码:

我对代码做了一些修改,下面是代码:

public class CobaXMLPullParser extends Activity {

protected static final int DIALOG_KEY = 0;
ListView mListView;
ProgressDialog mProgressDialog;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    this.setProgressBarIndeterminateVisibility(false);

    setContentView(R.layout.main);
    mListView = (ListView) findViewById(R.id.listView1);
    mListView.setTextFilterEnabled(true);


            LoadRecipesTask2 mLoadRecipesTask = new LoadRecipesTask2();
            String url = "http://androidcookbook.com/seam/resource/rest/recipe/list";
            showDialog(DIALOG_KEY);                                                     // 1
            mLoadRecipesTask.execute(url, url, url, url, url);                          // 2


}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_KEY:                                                               // 1
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);         // 2
        mProgressDialog.setMessage("Retrieving recipes...");                       // 3
        mProgressDialog.setCancelable(false);                                      // 4
        return mProgressDialog;
    }
    return null;
}


public static ArrayList<Datum> parse(String url) throws IOException, XmlPullParserException {
    final ArrayList<Datum> results = new ArrayList<Datum>();

    URL input = new URL(url);

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    XmlPullParser xpp = factory.newPullParser();

    xpp.setInput(input.openStream(), null);
    int eventType = xpp.getEventType();
    String currentTag = null;
    Integer id = null;
    String title = null;
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_TAG) {
            currentTag = xpp.getName();
        } else if (eventType == XmlPullParser.TEXT) {
            if ("id".equals(currentTag)) {
                id = Integer.valueOf(xpp.getText());
            }
            if ("title".equals(currentTag)) {
                title = xpp.getText();
            }
        } else if (eventType == XmlPullParser.END_TAG) {
            if ("recipe".equals(xpp.getName())) {
                results.add(new Datum(id, title));
            }
        }
        eventType = xpp.next();
    }
    return results;
}


public static ArrayList<Datum> parse2(String url) throws IOException, XmlPullParserException {
    final ArrayList<Datum> results = new ArrayList<Datum>();

    URL input = new URL(url);

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    XmlPullParser xpp = factory.newPullParser();

    xpp.setInput(input.openStream(), null);
    xpp.nextTag();
    xpp.require(XmlPullParser.START_TAG, null, "recipes");
    while (xpp.nextTag() == XmlPullParser.START_TAG) {
        xpp.require(XmlPullParser.START_TAG, null, "recipe");

        xpp.nextTag();
        xpp.require(XmlPullParser.START_TAG, null, "id");
        Integer id = Integer.valueOf(xpp.nextText());
        xpp.require(XmlPullParser.END_TAG, null, "id");

        xpp.nextTag();
        xpp.require(XmlPullParser.START_TAG, null, "title");
        String title = xpp.nextText();
        xpp.require(XmlPullParser.END_TAG, null, "title");

        xpp.nextTag();
        xpp.require(XmlPullParser.END_TAG, null, "recipe");

        results.add(new Datum(id, title));
    }
    xpp.require(XmlPullParser.END_TAG, null, "recipes");

    return results;
}


protected class LoadRecipesTask2 extends AsyncTask<String, Integer, ArrayList<Datum>> {

    @Override
    protected void onPreExecute() {
        mProgressDialog.show();                                                          // 1
    }

    @Override
    protected ArrayList<Datum> doInBackground(String... urls) {
        ArrayList<Datum> datumList = new ArrayList<Datum>();
        for (int i = 0; i < urls.length; i++) {                                          // 2
            try {
                datumList = parse(urls[i]);
                publishProgress((int) (((i+1) / (float) urls.length) * 100));            // 3
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }
        return datumList;
    }


    @Override
    protected void onProgressUpdate(Integer... values) {                                 // 4
        mProgressDialog.setProgress(values[0]);                                          // 5
    }

    @Override
    protected void onPostExecute(ArrayList<Datum> result) {
        mListView.setAdapter(new ArrayAdapter<Datum>(CobaXMLPullParser.this, R.layout.list_item, result));
        mProgressDialog.dismiss();                                                       // 6
    }
}
}

现在,我需要的是从ArrayList中获取item的值(例如:获取第三个标题)
我搞不懂它,因为如果我使用datumlist.get(3),它不能在textview中打印,因为它不返回字符串,任何人都可以帮助?

ArrayList包含数据对象,所以您可以调用getTitle

datumlist.get(3).getTitle()

它将返回一个包含字符串的基准对象

但是首先,
datumlist.get(3)
将返回第四个对象,而不是第三个对象,因为索引是基于零的

如果要检索第三个字符串,必须使用
datumlist.get(2).getTitle()

datumlist.get(3).getTitle()