【发布时间】:2015-11-19 04:57:54
【问题描述】:
我正在使用 for 循环来调用 asynctask 这就是我在片段中调用异步任务的方式:
private void LoadPartiList() {
for (int i = 0; i < participants.length; i ++){
String getlistparti = cmd.getPartList();
participants = getlistparti.split(",");
partiparti = ((CommentandLikeActivity)getActivity()).getparticipantlist(participants[i]);
Log.d("test","testlogcat " + partiparti);
}
这里是我在包含片段的活动中分配的异步任务:
public ArrayList<User> getparticipantlist(final String participationID) {
final ArrayList<User> list = new ArrayList<User>();
final User user = new User();
new AsyncTask<String, String, ArrayList<User>>() {
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected ArrayList<User> doInBackground(String... params) {
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
// Check for success tag
int success;
try {
// Building Parameters
Log.d("participantid", "17112015 " + participationID);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("userid", participationID));
// getting product details by making HTTP request
// Note that product details url will use GET request
JSONObject json = jsonParser.makeHttpRequest(
"http://192.168.168.111:80/testing/participationlist.php", "GET", params);
// check your log for json response
Log.d("Single Product Details", json.toString());
// json success tag
success = json.getInt("success");
if (success == 1) {
// successfully received product details
JSONArray productObj = json
.getJSONArray("product"); // JSON Array
// get first product object from JSON Array
JSONObject product = productObj.getJSONObject(0);
user.setId(String.valueOf(product.getString(String.valueOf("vuid"))));
user.setUsername(product.getString("vusername"));
user.setProfileimage(product.getString("vprofileimage"));
list.add(user);
Log.d("","getwalalala " +product.getString(String.valueOf("vuid")) +" : "+ product.getString("vusername") + " : " +product.getString("vprofileimage") );
}else{
// product with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return list;
}
@Override
protected void onPostExecute(ArrayList<User> list) {
List<User> mUserlist = new ArrayList<User>();
mAdapterr = new participantlistAdapter(getApplicationContext(), mUserlist);
mAdapterr.Update();
mAdapterr.add(user);
}
}.execute(null, participationID, null);
return list;
}
这是我在运行 Asynctask 时记录的内容
Logcat for Log.d("","getwalalalala")
但是为什么它只会返回 [] 或 null 呢?我的代码有什么问题吗?请帮忙... 我想根据participants.length中的长度循环userid从phpserver获取用户名并显示在listview中,我该怎么做? 上网查了几天也没得到答案
【问题讨论】:
-
你为什么在
doInBackground的UI线程上运行后台任务? -
@activesince93 这是一个在线示例,它能够从 php 获取数据,也是我知道从 php 服务器获取数据的唯一方法。我不太确定为什么它在 doInBackground 中运行后台任务。请帮忙编辑
-
谢谢@activesince93,我会试试的:)
标签: android android-fragments android-asynctask