2016-08-04 122 views
-1

我想从doinbackground传递2个字符串[]到我有RecyclerView的片段。我也试过的setter的getter方法,但仍然没有运气从doinbackground传递两个字符串数组到片段

这里是我的片段

@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执行方法在工具栏父活动片段的

更新:

1)由于@BryanDunlap当被问及onPostExecute(它只是实现的,没有它里面的代码),以及如何返回两个数组中的片段

2)获得@IrisLouis建议实施的界面,我怎么没带二传手和getter但我不行

ublic class WrapperClass { 

    private String[] Name; 
    private String[] ImagePath; 

    public String[] getImagePath() { 
     return ImagePath; 
    } 

    public void setImagePath(String[] imagePath) { 
     ImagePath = imagePath; 
    } 

    public String[] getName() { 

     return Name; 
    } 

    public void setName(String[] name) { 
     Name = name; 
    } 

我如何设置此在的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 
+0

我们缺少一些关键信息。你的AsyncTask中的onPostExecute()调用在哪里?这就是你应该将从doInBackground()返回的数据传递给你的Fragment的地方。 –

+0

@BryanDunlap喜欢什么? –

+0

为您解决。在onPostExcute()中创建接口回调传递数据并在Fragment中实现。 –

回答

0

为您解决,可以测试它。

在课堂上的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。

在片段中,您必须实现LoaderListener和Override三个函数。

例:YourFragment extends Fragment implements LoaderListener

您可以处理结果的回调在onLoadCompleted

例:

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

非常感谢您的帮助,我会尽快回复并回复给您 –

相关问题