android - ASyncTask 并从一个返回字符串数组值

标签 android arraylist android-asynctask return arrays

你好,我正在尝试创建一个 ASyncTask,它将在后台解析来自 XML 文件的数据,然后在 ListView 中显示该字符串数组数据。到目前为止,我不明白我做错了什么,或者如何将字符串数组值返回到我的 GUI。这是到目前为止我所拥有的代码,如果您需要其他任何东西,请告诉我。感谢您查看并提供任何建议或地方以了解更多信息。

package com.lvlup.kikurself.scotttest;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.app.ListActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import java.io.IOException;
import org.xml.sax.SAXException;

//import com.lvlup.kikurself.scotttest.WikiParser.Cm;

public class scottPlayers extends ListActivity {

public class PlayerGet extends AsyncTask<Void, Void, Void>{


@Override
protected void onPostExecute(Void result){

WikiParser p = new WikiParser();
ArrayList<String> titles = new ArrayList<String>();

try {
    p.parseInto(new URL("http://scottlandminecraft.wikia.com/api.php?action=query&list=categorymembers&cmtitle=Category:Players&cmlimit=500&format=xml"), titles);

} catch (MalformedURLException e) {
} catch (IOException e) {
} catch (SAXException e) {}

    //String[] values = new String[50]; 
    //values = res;




    ArrayAdapter<String> adapter = new ArrayAdapter<String>(scottPlayers.this, R.layout.main, titles);

    setListAdapter(adapter);

    //final ListView playersList = getListView();


    /*playersList.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long thisID)
    {
         Object o = (playersList.getItemAtPosition(position));
         String playerName_temp = (o.toString());

         Intent newIntent = new Intent(v.getContext(), playerDisp.class);
         newIntent.putExtra("tempN", playerName_temp);
         startActivity(newIntent);

    }
    });*/

}

 @Override
 protected void onPreExecute() {
  // TODO Auto-generated method stub
  Toast.makeText(scottPlayers.this,
    "onPreExecute \n: preload bitmap in AsyncTask",
    Toast.LENGTH_LONG).show();
 }


 @Override
 protected Void doInBackground(Void... params) {
  // TODO Auto-generated method stub

  return null;
 }


}


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

 setContentView(R.layout.main);

 new PlayerGet().execute();
}


    //get your data back again with: String fName = getIntent().getExtras().getInt("fname");




}

编辑:我在查看其他示例后添加了新代码,这是我想出的,但是现在当我在模拟器中运行它时,它只显示我的 Main.xml 的背景,列表不会填充,如果我将其导入运行 ICS 的手机,它说出现错误并强制关闭...出于某种原因我无法在模拟器中发生这种情况,并且模拟器的 LogCat 中没有错误。

最佳答案

public class scottPlayers extends ListActivity {

    private ArrayAdapter<String> mAdapter;

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

        mAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, new ArrayList<String>());

        setListAdapter(mAdapter);

        new PlayerGet().execute();
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        Object o = l.getItemAtPosition(position);
        String playerName_temp = o.toString();

        Intent newIntent = new Intent(v.getContext(), playerDisp.class);
        newIntent.putExtra("tempN", playerName_temp);
        startActivity(newIntent);
    }


    private class PlayerGet extends AsyncTask<Void, Void, ArrayList<String>> {

        WikiParser p = new WikiParser();
        ArrayList<String> titles = new ArrayList<String>();

        @Override
        protected ArrayList<String> doInBackground(Void... urls) {
            try {
                p.parseInto(new URL("http://scottlandminecraft.wikia.com/api.php?action=query&list=categorymembers&cmtitle=Category:Players&cmlimit=500&format=xml"), titles);
            } catch (MalformedURLException e) {
            } catch (IOException e) {
            } catch (SAXException e) {}
            return titles;
        }

        @Override
        protected void onPostExecute(ArrayList<String> result) {
            for (String item : result) {
                mAdapter.add(item);
            }
        }
    }
}

要更改的代码太多,请阅读 AsyncTask docs .特别是execute()onPostExecute() .

关于android - ASyncTask 并从一个返回字符串数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127931/

相关文章:

Android:AsyncTask 中的 HTTP 请求不是并发的

Android:如何在手机键盘弹出或下降时动态更改ListView的高度?

数组列表中的 C# 对象

java - 多维Java ArrayList(声明元素语法)

java - 检查 "List of Lists"中是否存在特定列表,无论顺序如何

java - ViewPager 中 Fragments 的长时间运行 AsyncTasks

android - 异步任务和处理程序 Android

java - 无法在 PDF 查看器应用程序中打开 PDF

Android Fragment 布局中的重复对象

android - 意外强制关闭