Java 将两个字符串数组从doinbackground传递到fragment

Java 将两个字符串数组从doinbackground传递到fragment,java,android,arrays,string,android-asynctask,Java,Android,Arrays,String,Android Asynctask,我试图将2个字符串[]从doinbackground传递到我有RecyclerView的片段。我也尝试过setter-getter方法,但仍然没有成功 这是我的片段 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the

我试图将2个字符串[]从doinbackground传递到我有RecyclerView的片段。我也尝试过setter-getter方法,但仍然没有成功

这是我的片段

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view=inflater.inflate(R.layout.activity_friend_list,container,false);
        recyclerView= (RecyclerView) view.findViewById(R.id.RecyclerViewForFriendList);

            //WANTS TO REPLACE THESE TWO ARRAY WITH WHICH I AM GETTING IN DOINBACKGROUND
            Name=getResources().getStringArray(R.array.left_Drawer_Menu);
            Image=getResources().obtainTypedArray(R.array.user_image);

        recyclerView.setHasFixedSize(true);

        adapter=new RecyclerFriendListAdapter(getActivity(),Distance,Image,LastSeen,Name);
        recyclerView.setAdapter(adapter);

        layoutManager=new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);



        return view;
    }
这是我的AsyncTask类

 protected String[] doInBackground(String... params) {
        try {
            URL url=new URL(URL_Path);
            connection= (HttpURLConnection) url.openConnection();
            connection.connect();


            InputStream inputStream=connection.getInputStream();
            reader=new BufferedReader(new InputStreamReader(inputStream));
            String line;
            StringBuffer stringBuffer=new StringBuffer();
            while ((line=reader.readLine())!=null){
                stringBuffer.append(line);

            }
            String completeJSON=stringBuffer.toString();

            JSONArray parentArray=new JSONArray(completeJSON);

            String[] Name=new String[parentArray.length()];
            String[] ImagePath=new String[parentArray.length()];
            for (int i = 0; i <parentArray.length() ; i++) {
                JSONObject childObject=parentArray.getJSONObject(i);

                String Fname=childObject.getString("First_Name") ;
                String Lname=childObject.getString("Last_Name") ;

                Name[i]=Fname+" "+Lname;
                ImagePath[i]=childObject.getString("Image");
                Log.d(TAG,"String Arrays "+Name[i]+" "+ ImagePath[i]);

                     //GETTING ALL VALUES IN LOG SUCCESSFULLY 



            }
            return Name;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {

            try {
                connection.disconnect();
                if (reader!=null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

@Override
    protected void onPostExecute(String[] strings) {
        super.onPostExecute(strings);
    }
我如何在AsyncTask中设置它

                Name[i]=Fname+" "+Lname;
                ImagePath[i]=childObject.getString("Image");
                Log.d(TAG,"String Arrays "+Name[i]+" "+ ImagePath[i]);
                //LOG RETURNS VALUE OF BOTH ARRAYS

                WrapperClass w=new WrapperClass();
                w.setImagePath(ImagePath);
                w.setImagePath(Name);
在onCreateView中获取片段

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) { 
                              ....
                              ....
                              ....
    WrapperClass wrapperClass=new WrapperClass();
            String[] Name=wrapperClass.getName();
            String[] ImagePath=wrapperClass.getImagePath();
            Log.d(TAG,Name.toString()+" "+ ImagePath.toString())


             //IT RETURNS NULLS

解决方案,你可以测试一下

类内Asynctask生成接口回调结果:

public class PageLoader extends AsyncTask<String, Void, String[] results> {

    private Context context;
    private LoaderListener mLoaderListener;

    public PageLoader(Context context, LoaderListener mLoaderListener) {
        this.context = context;
        this.mLoaderListener = mLoaderListener;
    }

    public interface LoaderListener {
        void onLoadCompleted(String[] results);

        void onLoadFailed();

        void onPreparing();
    }

    @Override
    protected void onPreExecute() {
        mLoaderListener.onPreparing();
    }

    @Override
    protected String[] doInBackground(String... params) {
         try {
            URL url=new URL(URL_Path);
            connection= (HttpURLConnection) url.openConnection();
            connection.connect();


            InputStream inputStream=connection.getInputStream();
            reader=new BufferedReader(new InputStreamReader(inputStream));
            String line;
            StringBuffer stringBuffer=new StringBuffer();
            while ((line=reader.readLine())!=null){
                stringBuffer.append(line);

            }
            String completeJSON=stringBuffer.toString();

            JSONArray parentArray=new JSONArray(completeJSON);

            String[] Name=new String[parentArray.length()];
            String[] ImagePath=new String[parentArray.length()];
            for (int i = 0; i <parentArray.length() ; i++) {
                JSONObject childObject=parentArray.getJSONObject(i);

                String Fname=childObject.getString("First_Name") ;
                String Lname=childObject.getString("Last_Name") ;

                Name[i]=Fname+" "+Lname;
                ImagePath[i]=childObject.getString("Image");
                Log.d(TAG,"String Arrays "+Name[i]+" "+ ImagePath[i]);

                     //GETTING ALL VALUES IN LOG SUCCESSFULLY 



            }
            return Name;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {

            try {
                connection.disconnect();
                if (reader!=null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    @Override
    protected void onPostExecute(String[] results) {
        if (results!= null) {
            mLoaderListener.onLoadCompleted(results);
        } else {
            mLoaderListener.onLoadFailed();
        }
    }


}

我们遗漏了一些关键信息。AsyncTask中的onPostExecute()调用在哪里?这就是您应该将从doInBackground()返回的数据传递到片段的地方。@BryanDunlap像什么?为您提供的解决方案。在OnPostExecute()中进行接口回调传递数据,并在片段中实现。是否要在片段中获取AsyncTask的结果?我已更新注释以反映缺少的内容。另外,您的片段看起来需要名称和图像,而您目前只从doInBackground()返回名称。非常感谢您的帮助,我将很快尝试并返回给您
public class PageLoader extends AsyncTask<String, Void, String[] results> {

    private Context context;
    private LoaderListener mLoaderListener;

    public PageLoader(Context context, LoaderListener mLoaderListener) {
        this.context = context;
        this.mLoaderListener = mLoaderListener;
    }

    public interface LoaderListener {
        void onLoadCompleted(String[] results);

        void onLoadFailed();

        void onPreparing();
    }

    @Override
    protected void onPreExecute() {
        mLoaderListener.onPreparing();
    }

    @Override
    protected String[] doInBackground(String... params) {
         try {
            URL url=new URL(URL_Path);
            connection= (HttpURLConnection) url.openConnection();
            connection.connect();


            InputStream inputStream=connection.getInputStream();
            reader=new BufferedReader(new InputStreamReader(inputStream));
            String line;
            StringBuffer stringBuffer=new StringBuffer();
            while ((line=reader.readLine())!=null){
                stringBuffer.append(line);

            }
            String completeJSON=stringBuffer.toString();

            JSONArray parentArray=new JSONArray(completeJSON);

            String[] Name=new String[parentArray.length()];
            String[] ImagePath=new String[parentArray.length()];
            for (int i = 0; i <parentArray.length() ; i++) {
                JSONObject childObject=parentArray.getJSONObject(i);

                String Fname=childObject.getString("First_Name") ;
                String Lname=childObject.getString("Last_Name") ;

                Name[i]=Fname+" "+Lname;
                ImagePath[i]=childObject.getString("Image");
                Log.d(TAG,"String Arrays "+Name[i]+" "+ ImagePath[i]);

                     //GETTING ALL VALUES IN LOG SUCCESSFULLY 



            }
            return Name;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {

            try {
                connection.disconnect();
                if (reader!=null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    @Override
    protected void onPostExecute(String[] results) {
        if (results!= null) {
            mLoaderListener.onLoadCompleted(results);
        } else {
            mLoaderListener.onLoadFailed();
        }
    }


}
@Override
public void onLoadCompleted(String[] results){
  //Do something with results
}