2016-06-21 4 views
0

Я пытаюсь вызвать свой API веб-приложений, который успешно получает мне список всех «профилей» и отображает их корректно (JsonArrayRequest для профилей). Однако у меня возникают проблемы, когда я вызываю последовательный URL-адрес, который содержит «совпадения» для профилей, указанных идентификатором профиля. Когда я вызываю этот APi и пытаюсь отобразить количество совпадений под каждым профилем, он работает, вероятно, в половине случаев. Я думаю, что моя проблема может заключаться в повторном использовании requestQueue, но я попытался создать новые, и моя проблема все еще остается! Любая помощь будет оценена по достоинству.Android Volley JsonArrayRequest работает в половину времени

import org.json.JSONArray; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Admin on 04-06-2015. 
*/ 
public class GetSellerProfileFragment extends Fragment { 
    private CustomListAdapter listAdapter; 
    private static final String profileUrl = "http://172.16.98.152:3000/apip/sellers/profiles"; 
    private static final String matchCountUrl = "http://172.16.98.152:3000/apip/sellers/profiles/matches/counts"; 
    private ProgressDialog pDialog; 
    private ListView listView; 
    private List<BuyerProfile> buyersProfiles = new ArrayList<BuyerProfile>(); 
    private View root; 
    private int matches; 
    private String matchId; 
    private FloatingActionButton fab; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     root = inflater.inflate(R.layout.fragment_get_seller_profiles, container, false); 
     RecyclerView rv = (RecyclerView) root.findViewById(R.id.rv); 
     rv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); 
     LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
     rv.setLayoutManager(llm); 
     rv.setItemAnimator(new DefaultItemAnimator()); 
     final CustomSellerProfileFragment recyclerAdapter = new CustomSellerProfileFragment(buyersProfiles); 
     rv.setAdapter(recyclerAdapter); 
     rv.setHasFixedSize(true); 
     RequestQueue mRequestQueue; 

     Cache cache = new DiskBasedCache(getActivity().getCacheDir(), 1024 * 1024); 
     Cache backupCache = new DiskBasedCache(getActivity().getCacheDir(), 1024* 1024); 

     Network network = new BasicNetwork(new HurlStack()); 
     mRequestQueue = new RequestQueue(cache, network); 
     mRequestQueue.start(); 

     JsonArrayRequest profileRequest = new JsonArrayRequest(profileUrl, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject obj = response.getJSONObject(i); 
           BuyerProfile parsedProfile = new BuyerProfile(); 
           parsedProfile.setBuyerProfTitle(obj.getString("title")); 
           parsedProfile.setDescription(obj.getString("description")); 
           parsedProfile.setLocations(obj.getString("locations")); 
           parsedProfile.setAssetTypes(obj.getString("asset_type")); 
           parsedProfile.setPropertyStatuses(obj.getString("property_status")); 
           parsedProfile.setProfileId(obj.getString("id")); 
           //parsedProfile.setMatchCount(matches); 
           //parsedProfile.setBuyerId("Select"); 
           buyersProfiles.add(parsedProfile); 
          } catch (Exception e) { 
           e.printStackTrace(); 
          } 
         } 
         recyclerAdapter.notifyDataSetChanged(); 
         // notifying list adapter about data changes 
         // so that it renders the list view with updated data 
         //hidePDialog(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       //Toast.makeText(selectBuyerProfile.this,"Error",Toast.LENGTH_LONG).show(); 

      } 
     }); 

     JsonArrayRequest matchRequest = new JsonArrayRequest(matchCountUrl, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject obj = response.getJSONObject(i); 
           for(int k = 0; i < buyersProfiles.size(); k++) { 
            if(buyersProfiles.get(k).getProfileId() == obj.getString("id")) { 
             buyersProfiles.get(k).setMatchCount(obj.getString("count")); 
             System.out.println(obj.getString("count")); 
            } 
           } 
          } catch (Exception e) { 
           e.printStackTrace(); 
          } 
         } 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       //Toast.makeText(selectBuyerProfile.this,"Error",Toast.LENGTH_LONG).show(); 
       System.out.println(error); 

      } 
     }); 

     mRequestQueue.add(matchRequest); 
     mRequestQueue.add(profileRequest); 
     return root; 
    } 
} 

И вот пример ответа на API Matchrequest.

[{"id":1,"count":"1"}] 

А вот ответ от продавцов профиля API

{"id":1,"title":"Test Seller","profile_status":"ACTIVE","description":"Testing Seller Profile","locations":"Mid-Wilshire","asset_type":"RETAIL","property_status":"COMING_SOON","role":"PRINCIPAL","investment_lower":"650000","investment_upper":"900000","seller_id":2,"created_on":"2016-06-14T18:09:27.411Z","updated_on":"2016-06-14T18:09:27.411Z","matching_opportunities":"1"} 
+0

Что делать, если matchRequest закончен до profileRequest? ... Что делать, если нет? Где адаптер узнает, что счетчик CountCount изменяется, чтобы он мог пересказывать представления? – Selvin

+0

@ Selvin эти изменения все еще дали мне проблему. Я думаю, что это связано с повторным использованием кеша или requestqueue, но если вы увидите мой ответ ниже, я обнаружил, что могу просто извлекать информацию непосредственно из API профилей продавцов. –

ответ

0

я понял, обходной путь, но не прямой ответ на мой вопрос. Вместо того, чтобы беспокоиться о вызове MATCH api, я понял, что могу просто вытащить непосредственно из профиля api и использовать часть «matching_opportunities» в массиве JSON.

+0

Зачем в апах матча в дополнение к этому я понятия не имею, но это решило мою проблему! –

Смежные вопросы