2017-12-05 29 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"); 
} 

OR も上の条件を追加します! CAT_ID = 0 OR CAT_ID = null 文字列url = config.api_url + "view_cat_item.php?cat_id =" + cat_id;

+0

すべての検証のようにタグを設定することができます方法)(onStop

@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

は、GoogleのボレーシングルトンクラスですVolleySingleton –

+0

シンボルを解決することはできません。私はコードにクラスを追加 –

+0

同じエラーをもう一度 –