Android AsyncTask始终返回null

Android AsyncTask始终返回null,android,android-fragments,android-asynctask,Android,Android Fragments,Android Asynctask,我使用for循环调用asynctask 以下是我在片段中调用asynctask的方式: private void LoadPartiList() { for (int i = 0; i < participants.length; i ++){ String getlistparti = cmd.getPartList(); participants = getlistparti.split(","); partiparti = ((CommentandLikeAc

我使用for循环调用asynctask 以下是我在片段中调用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);

}
private void loadpartlist(){
for(int i=0;i
这里是我的asynctask,它在包含片段的活动中分配:

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;
}
public ArrayList getparticipantlist(最终字符串participationID){
最终ArrayList=新ArrayList();
最终用户=新用户();
新建异步任务(){
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的ArrayList doInBackground(字符串…参数){
//从后台线程更新UI
runOnUiThread(新的Runnable(){
公开募捐{
//检查成功标签
成功;
试一试{
//建筑参数
日志d(“参与者ID”,“17112015”+参与者ID);
List params=new ArrayList();
添加(新的BasicNameValuePair(“userid”,participationID));
//通过发出HTTP请求获取产品详细信息
//请注意,产品详细信息url将使用GET请求
JSONObject json=jsonParser.makeHttpRequest(
"http://192.168.168.111:80/testing/participationlist.php“,”GET“,params);
//检查日志中的json响应
Log.d(“单一产品详细信息”,json.toString());
//json成功标记
success=json.getInt(“success”);
如果(成功==1){
//已成功接收产品详细信息
JSONArray productObj=json
.getJSONArray(“产品”);//JSON数组
//从JSON数组中获取第一个产品对象
JSONObject product=productObj.getJSONObject(0);
user.setId(String.valueOf(product.getString(String.valueOf(“vuid”))));
user.setUsername(product.getString(“Vuser名称”);
user.setProfileimage(product.getString(“vprofileimage”);
列表。添加(用户);
Log.d(“,”getwalalala“+product.getString(String.valueOf(“vuid”))+”:“+product.getString(“vuser名称”)+”:“+product.getString(“vprofileimage”));
}否则{
//找不到具有pid的产品
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
});
退货清单;
}
@凌驾
受保护的void onPostExecute(ArrayList列表){
List mUserlist=new ArrayList();
mAdapterr=新参与者列表适配器(getApplicationContext(),mUserlist);
madapter.Update();
mAdapterr.add(用户);
}
}.execute(null,participationID,null);
退货清单;
}
下面是我在运行Asynctask时记录的内容

但为什么它只返回[]或null?我的代码有任何错误吗?请帮助。。。 我想根据participants.length中的长度循环userid以从phpserver获取用户名,并在listview中显示,我应该如何做?
经过几天的在线研究,我没有得到任何答案,因为您试图从AsyncTask返回不正确的数据。AsyncTask doInBackground将数据返回到onPostExecute。因此,无论您试图返回什么,都只能在onPostExecute中接收。但您仍然希望实现AsyncTask,然后通过以下方法之一实现此目的g方式:

  • 通过在活动中将AsyncTask定义为内部私有类,并直接使用onPostExecute中的数据来更新ui

  • 第二种方法是将接口回调传递给asynctask,并在该接口回调的帮助下将ui从asynctask更新为activity


  • 为什么你要在
    doInBackground
    中的UI线程上运行后台任务?@activesince93这是一个在线示例,可以从php获取数据,也是我知道的从php服务器获取数据的唯一方法。我不太清楚为什么它要在doInBackground中运行后台任务。请帮助编辑将帮助你。谢谢@activesince93,我会尝试it:)