2017-12-05 10 views
0

내 활동에 모든 탭이 동적으로 만들어집니다. 각 스 와이프 json 데이터가 호출됩니다. 발목 오류는 여러 번 스 와이프 한 후에 발생합니다. 이 후에는 조각이나 다른 페이지에서 사용할 수있는 데이터가 없습니다. 이 단지 같은 조건을 사용 발리에서 응답을 수신하는 동안 검증을 사용할 필요가 내 코드조각/뷰 페이지간에 스 와이프하는 동안 발리 오류가 발생합니다.

fragmentParent.addPage(jsonObject.getString("name"),jsonObject.getString("cat_id"),shop_id); 




    public class FragmentParent extends Fragment { 
     private TabLayout tabLayout; 
     private ViewPager viewPager; 
     private ViewPagerAdapter1 adapter; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_parent, container, false); 
     getIDs(view); 
     setEvents(); 
     return view; 
    } 

    private void getIDs(View view) { 
     viewPager = (ViewPager) view.findViewById(R.id.my_viewpager); 
     tabLayout = (TabLayout) view.findViewById(R.id.my_tab_layout); 
     adapter = new ViewPagerAdapter1(getFragmentManager(), getActivity(), viewPager, tabLayout); 
     viewPager.setAdapter(adapter); 
    } 

    int selectedTabPosition; 

    private void setEvents() { 

     tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       super.onTabSelected(tab); 
       viewPager.setCurrentItem(tab.getPosition()); 
       selectedTabPosition = viewPager.getCurrentItem(); 
       Log.d("Selected", "Selected " + tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       super.onTabUnselected(tab); 
       Log.d("Unselected", "Unselected " + tab.getPosition()); 
      } 
     }); 
    } 

    public void addPage(String pagename, String id,String shop_id) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("data", id); 
     bundle.putString("shop_id", shop_id); 
     FragmentChild fragmentChild = new FragmentChild(); 
     fragmentChild.setArguments(bundle); 
     adapter.addFrag(fragmentChild, pagename); 
     adapter.notifyDataSetChanged(); 
     if (adapter.getCount() > 0) tabLayout.setupWithViewPager(viewPager); 

     viewPager.setCurrentItem(adapter.getCount() - 1); 
     setupTabLayout(); 
    } 

    public void setupTabLayout() { 
     selectedTabPosition = viewPager.getCurrentItem(); 
     for (int i = 0; i < tabLayout.getTabCount(); i++) { 
      tabLayout.getTabAt(i).setCustomView(adapter.getTabView(i)); 
     } 
    } 
} 





public class FragmentChild extends Fragment { 
    String childname,shoppe_id; 
    RecyclerView imgflag; 
    CategoryItemAdapter categoryItemAdapter; 
    HttpStack stack; 
    List<ShopDetails> cat_item_list; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_child, container, false); 
     Bundle bundle = getArguments(); 
     childname = bundle.getString("data"); 
     shoppe_id=bundle.getString("shop_id"); 
     stack = new HurlStack(); 
     imgflag=(RecyclerView)view.findViewById(R.id.imgflag); 
     cat_item_list = new ArrayList<ShopDetails>(); 
     categoryItemAdapter = new CategoryItemAdapter(getActivity(),cat_item_list); 
     GridLayoutManager layoutManager 
       = new GridLayoutManager(getActivity(),1, GridLayoutManager.VERTICAL,false); 
     imgflag.setLayoutManager(layoutManager); 
     imgflag.setAdapter(categoryItemAdapter); 
     getCategoryItem(childname);  
     return view; 
    } 


    public void getCategoryItem(String cat_id) 
    { 

     stack = new HurlStack(null, createSslSocketFactory()); 
     final RequestQueue requestQueue = Volley.newRequestQueue(getActivity(),stack); 
     String url=config.api_url+"view_cat_item.php?cat_id="+cat_id; 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       if(response.equals("0 results")) 
       { 

       } 
       else 
       { 

        try { 
         JSONArray jsonArray=new JSONArray(response); 
         for(int i=0;i<jsonArray.length();i++) 
         { 
          JSONObject jsonObject=jsonArray.getJSONObject(i); 
          ShopDetails shopDetails=new ShopDetails(); 
          shopDetails.setItem_name(jsonObject.getString("item_name")); 
          shopDetails.setItem_image(jsonObject.getString("image")); 
          shopDetails.setItem_price(jsonObject.getString("price")); 
          shopDetails.setItem_desc(jsonObject.getString("ingredients")); 
          cat_item_list.add(shopDetails); 
         } 
         if(cat_item_list!=null) 
         { 

          categoryItemAdapter.notifyDataSetChanged(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

       Toast.makeText(getActivity(), "Unable to connect. Please check your connection.", Toast.LENGTH_SHORT).show(); 

      } 
     }){ 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("shoppe_id", shoppe_id); 
       return params; 
      } 
     }; 
     stringRequest.setRetryPolicy(new DefaultRetryPolicy(
       60000, 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
     stringRequest.setShouldCache(false); 
     requestQueue.add(stringRequest); 
    } 
    private static SSLSocketFactory createSslSocketFactory() { 
     TrustManager[] byPassTrustManagers = new TrustManager[]{new X509TrustManager() { 
      public X509Certificate[] getAcceptedIssuers() { 
       return new X509Certificate[0]; 
      } 

      public void checkClientTrusted(X509Certificate[] chain, String authType) { 
      } 

      public void checkServerTrusted(X509Certificate[] chain, String authType) { 
      } 
     }}; 

     SSLContext sslContext = null; 
     SSLSocketFactory sslSocketFactory = null; 
     try { 
      sslContext = SSLContext.getInstance("TLS"); 
      sslContext.init(null, byPassTrustManagers, new SecureRandom()); 
      sslSocketFactory = sslContext.getSocketFactory(); 

     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
      Log.e(TAG, StringUtils.EMPTY, e); 
     } catch (KeyManagementException e) { 
      Log.e(TAG, StringUtils.EMPTY, e); 
     } 
     return sslSocketFactory; 
    } 
    public final boolean isInternetOn() { 
     ConnectivityManager connec = (ConnectivityManager) getActivity().getSystemService(getActivity().getBaseContext().CONNECTIVITY_SERVICE); 
     if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || 
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { 

      return true; 
     } else if (
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || 
         connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { 

      return false; 
     } 
     return false; 
    } 
} 

답변

0

입니다 :

if(response!=null&&response.length()>10){ 
    try { 
     JSONArray jsonArray=new JSONArray(response); 
     for(int i=0;i<jsonArray.length();i++) 
     { 
      JSONObject jsonObject=jsonArray.getJSONObject(i); 
      ShopDetails shopDetails=new ShopDetails(); 
      shopDetails.setItem_name(jsonObject.getString("item_name")); 
      shopDetails.setItem_image(jsonObject.getString("image")); 
      shopDetails.setItem_price(jsonObject.getString("price")); 
      shopDetails.setItem_desc(jsonObject.getString("ingredients")); 
      cat_item_list.add(shopDetails); 
     } 
     if(cat_item_list!=null) 
     { 

      categoryItemAdapter.notifyDataSetChanged(); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
}else{ 
    Log.e("invalid","invalide responce"); 
} 

또는 도에 조건을 추가합니다! CAT_ID = 0 또는 CAT_ID = null String url = config.api_url + "view_cat_item.php? cat_id ="+ cat_id;

+0

모든 검증과 같은 태그를 설정할 수 있습니다() 메서드 중지시

@Override public void onStop() { super.onStop(); VolleySingleton.getInstance(getActivity()).getRequestQueue().cancelAll(VolleySingleton.TAG); } 

을 시도한 발리슛 요청을 취소 할 수 있습니다. 그러나 같은 오류가 다시 –

0

조각을 바꿀 때 발리가 요청을 반복해서 생성하기 때문에 발생한다고 생각합니다. 당신이 재정에 의해 조각에서 떠날 때 그래서 당신은 당신이 일이

jsonObjectRequest.setTag(VolleySingleton.TAG); 

VolleySingleton.java

public class VolleySingleton { 
    private static VolleySingleton mInstance; 
    private RequestQueue mRequestQueue; 
    private ImageLoader mImageLoader; 
    private static Context mCtx; 
    public static final String TAG = "tagData"; 

    private VolleySingleton(Context context) { 
     mCtx = context; 
     mRequestQueue = getRequestQueue(); 

     mImageLoader = new ImageLoader(mRequestQueue, 
       new ImageLoader.ImageCache() { 
        private final LruCache<String, Bitmap> 
          cache = new LruCache<String, Bitmap>(20); 

        @Override 
        public Bitmap getBitmap(String url) { 
         return cache.get(url); 
        } 

        @Override 
        public void putBitmap(String url, Bitmap bitmap) { 
         cache.put(url, bitmap); 
        } 
       }); 
    } 

    public static synchronized VolleySingleton getInstance(Context context) { 
     if (mInstance == null) { 
      mInstance = new VolleySingleton(context); 
     } 
     return mInstance; 
    } 

    public RequestQueue getRequestQueue() { 
     if (mRequestQueue == null) { 
      // getApplicationContext() is key, it keeps you from leaking the 
      // Activity or BroadcastReceiver if someone passes one in. 
      mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); 
     } 
     return mRequestQueue; 
    } 

    public <T> void addToRequestQueue(Request<T> req) { 
     getRequestQueue().add(req); 
    } 

    public ImageLoader getImageLoader() { 
     return mImageLoader; 
    } 
} 
+0

기호를 해결할 수 없습니다 VolleySingleton –

+0

그것은 구글 발리 싱글 톤 클래스입니다. 코드에 클래스를 추가했습니다. –

+0

같은 오류가 다시 나타납니다. –