1

I am trying to implement Ranking for city, country and Worldwide in my App while fetching data using Volley as JSON response and loading it in seperate ArrayList. My problem is that it loads data in arrayList but pagerAdapter.notifyDataSetChanged() does not reflect the new data until you manual rotate mobile orientation and onCreate() or onResume() is called automatically. Bellow is the code for RatingActivity.java. and BlankFragment.java to load cards(Recyclers).

RatingActivity.java

public class RatingActivity extends AppCompatActivity {

String user,aun, aps;
int lst=0;
public static ArrayList<String> emailst1, ranklst1, namelst1, ratinglst1;
public static ArrayList<String> emailst2, ranklst2, namelst2, ratinglst2;
public static ArrayList<String> emailst3, ranklst3, namelst3, ratinglst3;
public static PagerAdapter pagerAdapter;
TextView txtmyrank, txtmyname, txtmyrating;
public static int ran[]={0,0,0};
public static int tabpost;
public String[] usdtl={"","","",""};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rating);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    javalib jl = new javalib();

    txtmyrank=(TextView)findViewById(R.id.txtmyrank);
    txtmyname=(TextView)findViewById(R.id.txtmyname);
    txtmyrating=(TextView)findViewById(R.id.txtmyrating);


    aun = jl.HelloJNI();
    aps = jl.HiJNI();
    aps=aps.substring(0,aps.length()-1);

    DBHelper db = new DBHelper(this);
    //Log.e("Called","yeh");
    SessionM session = new SessionM(this);
    // get user data from session
    HashMap<String, String> user;
    user = session.getUserDetails();

    String Usremail = user.get(SessionM.KEY_EMAIL);
    usdtl = db.getUserDetail(Usremail);
    String loc = usdtl[1];

    emailst1 = new ArrayList<String>();
    ranklst1 = new ArrayList<String>();
    namelst1 = new ArrayList<String>();
    ratinglst1 = new ArrayList<String>();
    emailst2 = new ArrayList<String>();
    ranklst2 = new ArrayList<String>();
    namelst2 = new ArrayList<String>();
    ratinglst2 = new ArrayList<String>();
    emailst3 = new ArrayList<String>();
    ranklst3 = new ArrayList<String>();
    namelst3 = new ArrayList<String>();
    ratinglst3 = new ArrayList<String>();

    String[] address={"",""};

    address[0]=loc.substring(0,loc.indexOf(','));
    address[1]=loc.substring(loc.indexOf(',')+1,loc.length());

    txtmyname.setText(usdtl[2]);
    txtmyrating.setText(usdtl[3]);

    //////////////////////////// update rank///////////////////////////////////////////////////////////////

    String url = "http://abcd.net/getRank.php?uname=" + aun + "&password=" + aps + "&usrname=" + usdtl[0] +"&location1="+address[0]+"&location2="+address[1]+"&app=0";
    Log.e("Url", url);
    RequestQueue requestQueue = Volley.newRequestQueue(RatingActivity.this);


    JsonArrayRequest jar4 = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    try {
                        Boolean isUpdate = response.getJSONObject(0).has("rank");
                        if (isUpdate == true) {
                                int lng = 0, il = 0;
                                lng = response.length();
                                while (il < lng) {
                                    Log.e("Rank response", response.toString());
                                    ran[il]=Integer.parseInt(response.getJSONObject(il).getString("rank"));
                                    il++;
                                }
                        } else {
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    );
    // Adding request to request queue
    requestQueue.add(jar4);

    url = "http://abcd.net/ctranking.php?uname=" + aun + "&password=" + aps + "&usrname=" + usdtl[0] +"&location="+address[0]+"&cpage=1&app=0";
    requestQueue = Volley.newRequestQueue(RatingActivity.this);


    JsonArrayRequest jar1 = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    try {
                        Boolean isUpdate = response.getJSONObject(0).has("username");
                        Boolean isId = response.getJSONObject(0).has("randno");

                        if (isUpdate == true) {
                            if (isId == true) {
                                int lng = 0, il = 0;
                                lng = response.length();
                                ranklst1 = new ArrayList<String>();
                                namelst1 = new ArrayList<String>();
                                ratinglst1 = new ArrayList<String>();
                                while (il < lng) {
                                    ranklst1.add((il+1)+"");
                                    emailst1.add(response.getJSONObject(il).getString("username"));
                                    namelst1.add(response.getJSONObject(il).getString("name"));
                                    ratinglst1.add(response.getJSONObject(il).getString("randno"));
                                    il++;
                                }
                                lst++;
                                if(lst==3)
                                    setList();
                            }
                        } else {
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    );
    // Adding request to request queue
    requestQueue.add(jar1);

    url = "http://abcd.net/cntranking.php?uname=" + aun + "&password=" + aps + "&usrname=" + usdtl[0] +"&location="+address[1]+"&cpage=1&app=0";
    RequestQueue requestQueue2 = Volley.newRequestQueue(RatingActivity.this);
    JsonArrayRequest jar2 = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    try {
                        Boolean isUpdate = response.getJSONObject(0).has("username");
                        Boolean isId = response.getJSONObject(0).has("randno");
                        if (isUpdate == true) {
                            if (isId == true) {
                                int lng = 0, il = 0;
                                lng = response.length();
                                ranklst2 = new ArrayList<String>();
                                namelst2 = new ArrayList<String>();
                                ratinglst2 = new ArrayList<String>();
                                while (il < lng) {
                                    ranklst2.add((il+1)+"");
                                    emailst2.add(response.getJSONObject(il).getString("username"));
                                    namelst2.add(response.getJSONObject(il).getString("name"));
                                    ratinglst2.add(response.getJSONObject(il).getString("randno"));
                                    il++;
                                }
                                lst++;
                                if(lst==3)
                                    setList();
                            }
                        } else {
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            }
    );
    // Adding request to request queue
    requestQueue2.add(jar2);


    url = "http://abcd.net/wwranking.php?uname=" + aun + "&password=" + aps + "&usrname=" + usdtl[0] +"&cpage=1&app=0";

    RequestQueue requestQueue3 = Volley.newRequestQueue(RatingActivity.this);
    JsonArrayRequest jar3 = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    try {
                        Boolean isUpdate = response.getJSONObject(0).has("username");
                        Boolean isId = response.getJSONObject(0).has("randno");

                        if (isUpdate == true) {
                            if (isId == true) {
                                int lng = 0, il = 0;
                                lng = response.length();
                                ranklst3 = new ArrayList<String>();
                                namelst3 = new ArrayList<String>();
                                ratinglst3 = new ArrayList<String>();
                                while (il < lng) {
                                    ranklst3.add((il+1)+"");
                                    emailst3.add(response.getJSONObject(il).getString("username"));
                                      namelst3.add(response.getJSONObject(il).getString("name"));
                                    ratinglst3.add(response.getJSONObject(il).getString("randno"));
                                    il++;
                                }
                                lst++;

                                if(lst==3)
                                    setList();

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

                }
            }
    );
    // Adding request to request queue
    requestQueue3.add(jar3);

    /////////////////////////////////////////////////////////////////////////////////////////////////////




}
public void setList(){
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    pagerAdapter =
            new PagerAdapter(getSupportFragmentManager(), RatingActivity.this);

    viewPager.setAdapter(pagerAdapter);

    // Give the TabLayout the ViewPager
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(viewPager);


    // Iterate over all tabs and set the custom view
    for (int i = 0; i < tabLayout.getTabCount(); i++) {
        TabLayout.Tab tab = tabLayout.getTabAt(i);
        tab.setCustomView(pagerAdapter.getTabView(i));

    }

    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            switch(position){
                case 0:
                        ran[0]=emailst1.indexOf(usdtl[0])+1;
                    break;
                case 1:
                    ran[1]=emailst2.indexOf(usdtl[0])+1;
                    break;
                case 2:
                    ran[2]=emailst3.indexOf(usdtl[0])+1;
                    break;
            }
            txtmyrank.setText(ran[position]+"");
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

class PagerAdapter extends FragmentPagerAdapter {

    String tabTitles[] = new String[] { "શહેર", "દેશ", "વૈશ્વિક" };
    Context context;

    public PagerAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.context = context;

    }

    @Override
    public int getCount() {
        return tabTitles.length;
    }

    @Override
    public Fragment getItem(int position) {

        Bundle extra = new Bundle();
        switch (position) {
            case 0:
                tabpost=1;
                break;

            case 1:
                tabpost=2;
                break;
            case 2:
                tabpost=3;
                break;
        }
        extra.putString("position", tabpost+"");
        BlankFragment bf = new BlankFragment();
        bf.setArguments(extra);
        return bf;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        // Generate title based on item position
        return tabTitles[position];
    }

    public View getTabView(int position) {
        View tab = LayoutInflater.from(RatingActivity.this).inflate(R.layout.custom_tab, null);
        TextView tv = (TextView) tab.findViewById(R.id.custom_text);
        tv.setText(tabTitles[position]);
        return tab;
    }

}
}

Following is the code for BlankFragment.java

public class BlankFragment extends Fragment {
int tabpost;
Boolean userScrolled=false;
ArrayList<String> alstname, alstrank, alstrating;
public BlankFragment(){

}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    tabpost=Integer.parseInt(getArguments().getString("position"));
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    final View rootView = inflater.inflate(R.layout.fragment_blank, container, false);

    final RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
    rv.setHasFixedSize(true);
    switch (tabpost) {
        case 1:
            alstname = RatingActivity.namelst1;
            alstrank = RatingActivity.ranklst1;
            alstrating = RatingActivity.ratinglst1;
            break;
        case 2:
            alstname = RatingActivity.namelst2;
            alstrank = RatingActivity.ranklst2;
            alstrating = RatingActivity.ratinglst2;
            break;
        case 3:
            alstname = RatingActivity.namelst3;
            alstrank = RatingActivity.ranklst3;
            alstrating = RatingActivity.ratinglst3;
            break;

    }
    MyAdapter adapter = new MyAdapter(alstname, alstrank, alstrating);

    rv.setAdapter(adapter);
    final LinearLayoutManager llm = new LinearLayoutManager(getActivity());

    rv.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                userScrolled = true;
            }
        }
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            Log.e("dx, dy", dx+" "+dy);
            int visibleItemCount = llm.getChildCount();
            int totalItemCount = llm.getItemCount();
            int pastVisiblesItems = llm.findFirstVisibleItemPosition();

            if (userScrolled
                    && (visibleItemCount + pastVisiblesItems) == totalItemCount) {
                userScrolled = false;

                ///////////////// updating rank list////////////////////////////////////
                switch (tabpost) {
                    case 1:
                        Log.e("Updating","Recycler View1"+tabpost);
                        updatelist(1, totalItemCount);
                        break;
                    case 2:
                        Log.e("Updating","Recycler View2"+tabpost);
                        updatelist(2, totalItemCount);
                        break;
                    case 3:
                        Log.e("Updating","Recycler View3"+tabpost);
                        updatelist(3, totalItemCount);
                        break;

                }


                /////////////////////////////////////////////////////////////////////////



            }
        }
    });

    rv.setLayoutManager(llm);

    return rootView;
}

void updatelist(int post, int item){
    javalib jl = new javalib();
    String aun = jl.HelloJNI();
    String aps = jl.HiJNI();
    aps=aps.substring(0,aps.length()-1);
    DBHelper db = new DBHelper(getContext());
    //Log.e("Called","yeh");
    SessionM session = new SessionM(getContext());
    // get user data from session
    HashMap<String, String> user;
    user = session.getUserDetails();

    String Usremail = user.get(SessionM.KEY_EMAIL);
    String[] usdtl = db.getUserDetail(Usremail);
    String loc = usdtl[1];
    String[] address={"",""};

    address[0]=loc.substring(0,loc.indexOf(','));
    address[1]=loc.substring(loc.indexOf(',')+1,loc.length());



    int page1;
    if(item==0)
        page1=1;
    else
        page1=(item-1)/3 + 2;

    String url = "http://abcd.net/ctranking.php?uname=" + aun + "&password=" + aps + "&usrname=" + usdtl[0] +"&location="+address[0]+"&cpage="+page1+"&app=0";

    Log.e("url", url);
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());



    JsonArrayRequest jar1 = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    try {
                        Boolean isUpdate = response.getJSONObject(0).has("username");
                        Boolean isId = response.getJSONObject(0).has("randno");

                        if (isUpdate == true) {
                            if (isId == true) {
                                int lng = 0, il = 0;
                                lng = response.length();
                                while (il < lng) {
                                    RatingActivity.ranklst1.add((RatingActivity.ranklst1.size()+1)+"");
                                    RatingActivity.emailst1.add(response.getJSONObject(il).getString("username"));
                                    RatingActivity.namelst1.add(response.getJSONObject(il).getString("name"));
                                    RatingActivity.ratinglst1.add(response.getJSONObject(il).getString("randno"));
                                    il++;
                                }
                                RatingActivity.pagerAdapter.notifyDataSetChanged();
                            }
                        } else {
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    );
    // Adding request to request queue

    url = "http://abcd.net/cntranking.php?uname=" + aun + "&password=" + aps + "&usrname=" + usdtl[0] +"&location="+address[1]+"&cpage="+page1+"&app=0";
    Log.e("url", url);

    RequestQueue requestQueue2 = Volley.newRequestQueue(getContext());
    JsonArrayRequest jar2 = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    try {
                        Boolean isUpdate = response.getJSONObject(0).has("username");
                        Boolean isId = response.getJSONObject(0).has("randno");
                        if (isUpdate == true) {
                            if (isId == true) {
                                int lng = 0, il = 0;
                                lng = response.length();
                                /*RatingActivity.ranklst2 = new ArrayList<String>();
                                RatingActivity.namelst2 = new ArrayList<String>();
                                RatingActivity.ratinglst2 = new ArrayList<String>();*/
                                while (il < lng) {
                                    RatingActivity.ranklst2.add((RatingActivity.ranklst2.size()+1)+"");
                                    RatingActivity.emailst2.add(response.getJSONObject(il).getString("username"));
                                    RatingActivity.namelst2.add(response.getJSONObject(il).getString("name"));
                                    RatingActivity.ratinglst2.add(response.getJSONObject(il).getString("randno"));
                                    il++;
                                }
                                RatingActivity.pagerAdapter.notifyDataSetChanged();

                            }
                        } else {
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    );
    url = "http://abcd.net/wwranking.php?uname=" + aun + "&password=" + aps + "&usrname=" + usdtl[0] +"&cpage="+page1+"&app=0";
    Log.e("url", url);

    RequestQueue requestQueue3 = Volley.newRequestQueue(getContext());
    JsonArrayRequest jar3 = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    try {
                        Boolean isUpdate = response.getJSONObject(0).has("username");
                        Boolean isId = response.getJSONObject(0).has("randno");

                        if (isUpdate == true) {
                            if (isId == true) {
                                int lng = 0, il = 0;
                                lng = response.length();
                                while (il < lng) {
                                    RatingActivity.ranklst3.add((RatingActivity.ranklst3.size()+1)+"");
                                    RatingActivity.emailst3.add(response.getJSONObject(il).getString("username"));
                                    RatingActivity.namelst3.add(response.getJSONObject(il).getString("name"));
                                    RatingActivity.ratinglst3.add(response.getJSONObject(il).getString("randno"));
                                    il++;
                                }
                                RatingActivity.pagerAdapter.notifyDataSetChanged();


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

                }
            }
    );

    switch (post) {
    case 1:   requestQueue.add(jar1);
        break;
    // Adding request to request queue
    case 2:
        requestQueue2.add(jar2);
        break;
    // Adding request to request queue
    case 3: requestQueue3.add(jar3);
        break;
}
    /////////////////////////////////////////////////////////////////////////////////////////////////////


}

}
joshiparas
  • 141
  • 1
  • 1
  • 8
  • check this http://stackoverflow.com/questions/18747975/difference-between-fragmentpageradapter-and-fragmentstatepageradapter – satti8893 Apr 14 '17 at 05:32
  • Few things about code refactoring: 1) Don't put classes in your Activity, extract PagerAdapter etc.. from your Activity and put them outside. So you get clean Activity and reusable PagerAdapter 2) Let Fragments call their web services themselves, handle their state, errors etc... Instead of Activity doing all different logics and sending data to different Fragments 3) Put those web service Volley calls outside in different Manager class, so Activity or Fragment calls myManager.callMyService(params...) – Jemshit Apr 14 '17 at 08:26

0 Answers0