我试图从AsyncTask类返回一个ArrayList返回到MainAcitivity类,然后使用这个ArrayList填充MainActivity中的gridview。ASyncTask并返回一个ArrayList
parseURL需要一个String参数来解析url。当用户点击按钮时,parseURL被执行。我编译并运行的代码,但在触发按钮事件后未填充gridview并且按下按钮两次会使应用程序崩溃。
编辑︰加入循环回调后,它停止崩溃,但它仍然不会填充gridview。,我想填充GridView中ArrayList对象是这种格式10,John,Smith
这里是我的MainActivity代码(使用斯坦尼斯拉夫·博德纳尔建议)
private GridView grid1;
private ArrayAdapter<String> adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initalized the grid and adapter
grid1 = (GridView)findViewById(R.id.gridView1);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
grid1.setAdapter(adapter);
}
public void onButtonClick(View v) {
EditText textInput = (EditText) findViewById(R.id.editText1);
String code = textInput.getText().toString();
new parseURL() {
@Override
protected void onPostExecute(List<String> list) {
//use the list from parseURL to fill grid view
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
gridView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}.execute(code);
的parseURL类
public class parseURL extends AsyncTask<String, Void, List<String>> {
protected List<String> doInBackground(String... params) {
List<String> str = new ArrayList<String>();
try {
Document doc = Jsoup.connect("http://www.mywebsite.com/id/" + params).get();
Elements row1 = doc.select("table");
Elements row2 = doc.select("td");
Elements row3 = doc.select("td");
for (int i = 0; i < row1.size(); i++) {
str.add(row1.get(i).text() + "," + row2.get(i).text() + "," + row2.get(i).text());
}
return str;
} catch (Exception e) {
return new ArrayList<String>();
}
}
我不知道为什么在GridView未填充,但的AsyncTask只能一次(如果第二试图执行一个异常将被抛出。) – Prudhvi 2015-02-24 22:09:25
,因为你不执行为'列表 str;'分配新的列表,'str.add'会立即抛出NullPointerException?并与空'catch'你从来没有机会知道这一点...... –
2015-02-24 22:09:56