我已閱讀CWAC-endlessAdapter
以及演示項目的所有文檔。我明白它是如何工作的,而且大多數情況下都是這樣。但是我有幾個問題想知道如何處理一些事情,我現在正在做這些事情(我還沒有找到任何工作的例子)。通過在對象中傳遞AsyncTask來實現EndlessAdapter []
下面是一個典型AsyncTask
我使用(清理了一下):
class ReviewTask extends AsyncTask<String, String, Void> {
@Override
protected Void doInBackground(String... params) {
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("username", userName));
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);
try {
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (Exception e) {
}
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
}
return null;
}
protected void onPostExecute(Void v) {
String review, newdate, item, rating, cat;
try {
JSONArray jArray = new JSONArray(result);
JSONObject json_data = null;
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
newdate = json_data.getString("date");
review = json_data.getString("review");
item = json_data.getString("item");
rating = json_data.getString("rating");
cat = json_data.getString("category");
reviews.add(review);
itemslist.add(item);
datelist.add(newdate);
ratings.add(rating);
cats.add(cat);
}
}
Profile[] p = new Profile[reviews.size()];
int index = 0;
for (String i : reviews) {
p[index] = new Profile(reviews.get(index), datelist.get(index),
itemslist.get(index), ratings.get(index),
cats.get(index));
index++;
}
if (getActivity() != null) {
adapter = new ProfileAdapter(getActivity(), p);
setListAdapter(adapter);
}
}
}
在這種task
,我從MySQL
數據庫通過php
的所有數據。我寫的SQL
查詢立即收集所有數據。這是正確的仍然處理這種方式?
此外,我在ListFragment
的onCreateView
中將此任務稱爲。但它看起來像需要在cacheInBackground()
中調用任務?
最後,這聽起來像我必須設置adapter
在onActivityCreated
這樣的:
// from Example
if (adapter==null) {
items=new ArrayList<Integer>();
for (int i=0;i<25;i++) { items.add(i); }
adapter=new DemoAdapter(items);
adapter.setRunInBackground(false);
}
setListAdapter(adapter);
我不明白或看到那裏是DemoAdapter(items)
一個構造函數,並基於這樣的事實,我傳遞一個對象數組,我會做一些像DemoAdapter(object [])嗎?如果它爲空則可以,因爲收集數據實際上發生在適配器中,對嗎?
最後需要說明的是,我的所有適配器都位於設置它們的片段之外的類中。
感謝您的快速反應。其實,我確實需要這個適配器。我有很長的名單,我想分解,並希望被加載爲用戶滾動。所以這基本上意味着我必須一次只得到一定數量的行,例如「LIMIT 50」? – KickingLettuce 2013-04-11 19:57:31
@KickingLettuce:是的,'LIMIT'和'OFFSET',或等效的。基本上,你的Web服務界面,您的數據庫後端需要支持「分頁」的結果(例如,「給我3頁」)。 – CommonsWare 2013-04-11 20:03:44