我試圖從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