2016-09-02 4 views
0

ArrayListJSONObjectリクエストから取得するにはどうすればよいですか?JSONObjectリクエストからArrayListを取得する方法

インターフェイスを試しましたが、動作しません。セッターとゲッターもうまくいきません。私はRecyclerViewを使用しています。

これは

public class EditDoctor extends Fragment { 
    RecyclerView recyclerView; 
    String key; 
    String url; 
    RecyclerAdapterEditDoctor edit; 
    SharedPreferences sharedPreferences; 
    RequestQueue queue; 
    ArrayList<EditDoctorModel> listOfPojo = new ArrayList<>(); 

    public EditDoctor() 
    { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstaneState) 
    { 
     View view = inflater.inflate(R.layout.editdoctor,container,false); 
     Context context = getActivity(); 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
     key = sharedPreferences.getString("key", ""); 

     return view; 
    } 

    @Override 
    public void onViewCreated(View view,Bundle savedInstanceState) { 
     setRetainInstance(true); 

    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler1); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     queue = Volley.newRequestQueue(getActivity()); 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     key = sharedPreferences.getString("key", ""); 
     url = "http://192.168.0.153:9091/drrate/api/profile/Search?page=1&size=10&filter=[{\"col\":\"MemberKey\",\"val\":\""+key+"\",\"cond\":\"Equal\"}]"; 
     getJSONRequest(); 
     edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo); 
     recyclerView.setAdapter(edit); 

    } 

    // This is the Request 
    public void getJSONRequest() { 

     JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url, 
      new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject response) { 
       ArrayList<EditDoctorModel>temp = new ArrayList<>(); 
       try { 
        JSONArray Jarray = response.getJSONArray("Data"); 
        for (int i = 0; i < Jarray.length(); i++) { 
         JSONObject object = Jarray.getJSONObject(i); 
         EditDoctorModel editDoctorModel = new EditDoctorModel(); 
         editDoctorModel.setFullName(object.getString("Name")); 
         editDoctorModel.setProfession(object.getString("Profession")); 
         editDoctorModel.setUrl(object.getString("Image")); 
         temp.add(editDoctorModel); 
        } 
        // this work but android monitor says that skipping layout adapter not attached 
        // edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo); 
        // recyclerView.setAdapter(edit); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
    }); 
    queue.add(req); 
} 

が私を助けてください、私のコードです。前もって感謝します。

+1

http://stackoverflow.com/help/how-to-askをお読みください。あなたがすでに試したものと何が効いていないものかを教えてください。 –

+0

私はちょうどあなたの 'JSON'も表示するtempリスト – sydney69

+0

を取得する必要があります。 –

答えて

1

解析したデータをデータセットlistOfPojoに追加し、アダプタでnotifyDataSetChangedを呼び出します。

バレーボールが応答あなたrecyler autmaticallyの更新を取得するたびに、あなたのアダプタで方法の下

public void updateRecyler(ArrayList<EditDoctorModel> list){ 
this.your_adapterModel_list=list; 
notifyDatasetChanged(); 
} 

を追加します。//

@Override 
public void onResponse(JSONObject response) { 
    ArrayList<EditDoctorModel> temp = new ArrayList<>(); 
    try { 
     JSONArray Jarray = response.getJSONArray("Data"); 
     for (int i = 0; i < Jarray.length(); i++) { 
      JSONObject object = Jarray.getJSONObject(i); 
      EditDoctorModel editDoctorModel = new EditDoctorModel(); 
      editDoctorModel.setFullName(object.getString("Name")); 
      editDoctorModel.setProfession(object.getString("Profession")); 
      editDoctorModel.setUrl(object.getString("Image")); 
      temp.add(editDoctorModel); 
     } 

     // add the data in temp to listOfPojo 
     listOfPojo.clear(); 
     listOfPojo.addAll(temp); 

     // notify the adapter that the data has changed 
     edit.notifyDataSetChanged(); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

これは私の問題は、私がlistofPojo.add(temp);このlistOfPojo.addAll(temp)を追加します。このedit.notifyDataSetChanged()も同様です。 jsonobjectrequestのスレッドが完了したときにデータが失われるということはありません。 – sydney69

+0

@ sydney69その 'addAll'ではなく' add'です。 –

+1

良いそれはありがとうございます – sydney69

2

コード内でいくつかのchagesを作る

public class EditDoctor extends Fragment { 
    RecyclerView recyclerView; 
    String key; 
    String url; 
    RecyclerAdapterEditDoctor edit; 
    SharedPreferences sharedPreferences; 
    RequestQueue queue; 
    ArrayList<EditDoctorModel> listOfPojo; 

    public EditDoctor() 
    { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstaneState) 
    { 
     View view = inflater.inflate(R.layout.editdoctor,container,false); 
     Context context = getActivity(); 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
     key = sharedPreferences.getString("key", ""); 

     return view; 
    } 

    @Override 
    public void onViewCreated(View view,Bundle savedInstanceState) { 
     setRetainInstance(true); 

    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler1); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     queue = Volley.newRequestQueue(getActivity()); 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     key = sharedPreferences.getString("key", ""); 
     url = "http://192.168.0.153:9091/drrate/api/profile/Search?page=1&size=10&filter=[{\"col\":\"MemberKey\",\"val\":\""+key+"\",\"cond\":\"Equal\"}]"; 
     getJSONRequest(); 
     edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo); 
     recyclerView.setAdapter(edit); 

    } 

    // This is the Request 
    public void getJSONRequest() { 

     JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url, 
      new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject response) { 
       listOfPojo = new ArrayList<>(); 
       try { 
        JSONArray Jarray = response.getJSONArray("Data"); 
        for (int i = 0; i < Jarray.length(); i++) { 
         JSONObject object = Jarray.getJSONObject(i); 
         EditDoctorModel editDoctorModel = new EditDoctorModel(); 
         editDoctorModel.setFullName(object.getString("Name")); 
         editDoctorModel.setProfession(object.getString("Profession")); 
         editDoctorModel.setUrl(object.getString("Image")); 
         listOfPojo.add(editDoctorModel); 
        } 
        // this work but android monitor says that skipping layout adapter not attached 
        // edit = new RecyclerAdapterEditDoctor(getActivity(),listOfPojo); 
        // recyclerView.setAdapter(edit); 
      edit.updateRecyler(listOfPojo); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
    }); 
    queue.add(req); 
} 

、これを試してみてください。

+0

アイデアのために感謝します。問題は既に解決されている – sydney69

+0

@ sydney69そのOk –

関連する問題