Jeden z fragmentów wyświetla dane JSON w recyclerView. We fragmencie jest BootomBar do filtrowania zawartości. Jęsli klikniemy np psy to wyswietlane są zdjęcia psów. Na androidzie 7 działa wszystko bardzo dobrze jednak na niższych żadne dane nie są wyświetlane.
kod
public class WszystkoFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
private Activity referenceActivity;
private View parentHolder;
private String JSON_URL = "http://ADRES_URL.php?kategoria=%27%%27";
private JsonArrayRequest request;
private RequestQueue requestQueue;
private List<TabelaNews> mTabela;
private RecyclerView recyclerView;
private BottomNavigationView mNav;
private SwipeRefreshLayout mSwipeRefreshLayout;
public WszystkoFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
referenceActivity = getActivity();
parentHolder = inflater.inflate(R.layout.fragment_wszystko, container, false);
mTabela = new ArrayList<>();
recyclerView = (RecyclerView) parentHolder.findViewById(R.id.news_recyclerview);
recyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
mNav = (BottomNavigationView) parentHolder.findViewById(R.id.NavBot);
mNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.nav_wszystko){
JSON_URL = "http://ADRES_URL.php?kategoria=%27%%27";
jsonrequest();
}
if (item.getItemId() == R.id.nav_psy){
JSON_URL = "http://ADRES_URL.php?kategoria=%27psy%27";
jsonrequest();
}
if (item.getItemId() == R.id.nav_koty){
JSON_URL = "http://ADRES_URL.php?kategoria=%27koty%27";
jsonrequest();
}
if (item.getItemId() == R.id.nav_konie){
JSON_URL = "http://ADRES_URL.php?kategoria=%27konie%27";
jsonrequest();
}
if (item.getItemId() == R.id.nav_ryby){
JSON_URL = "http://ADRES_URL.php?kategoria=%27ryby%27";
jsonrequest();
}
return true;
}
});
mSwipeRefreshLayout = (SwipeRefreshLayout) parentHolder.findViewById(R.id.wszystko_swipe);
mSwipeRefreshLayout.setOnRefreshListener(this);
mSwipeRefreshLayout.setColorSchemeResources(R.color.colorAccent);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
jsonrequest();
}
});
return parentHolder;
}
@Override
public void onRefresh() {
jsonrequest();
}
private void jsonrequest() {
mSwipeRefreshLayout.setRefreshing(true);
mTabela = new ArrayList<>();
request = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
JSONObject jsonObject = null;
for (int i = 0; i <response.length(); i++) {
try {
jsonObject = response.getJSONObject(i);
TabelaNews tabelaNews = new TabelaNews();
tabelaNews.setId(jsonObject.getString("id"));
tabelaNews.setUrl(jsonObject.getString("url"));
tabelaNews.setImageUrl(jsonObject.getString("imageurl"));
tabelaNews.setKategoria(jsonObject.getString("kategoria"));
tabelaNews.setData(jsonObject.getString("data"));
mTabela.add(tabelaNews);
} catch (JSONException e) {
e.printStackTrace();
}
mSwipeRefreshLayout.setRefreshing(false);
}
NewsAdapter myadapter = new NewsAdapter(getContext(), mTabela);
recyclerView.setAdapter(myadapter);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mSwipeRefreshLayout.setRefreshing(false);
}
});
requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
requestQueue.add(request);
}
}
Fragment w którym dane są już przefiltrowane przez skrypt php działa bez zarzutów na nizszych androidach.
kod
public class DebicaFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
private Activity referenceActivity;
private View parentHolder;
private final String JSON_URL = "http://ADRES_URL/jsonpsy.php";
private JsonArrayRequest request;
private RequestQueue requestQueue;
private List<TabelaNews> mTabela;
private RecyclerView recyclerView;
private SwipeRefreshLayout mSwipeRefreshLayout;
public DebicaFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
referenceActivity = getActivity();
parentHolder = inflater.inflate(R.layout.fragment_debica, container, false);
mTabela = new ArrayList<>();
recyclerView = (RecyclerView) parentHolder.findViewById(R.id.debica_recyclerView);
recyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
mSwipeRefreshLayout = (SwipeRefreshLayout) parentHolder.findViewById(R.id.debica_swipe);
mSwipeRefreshLayout.setOnRefreshListener(this);
mSwipeRefreshLayout.setColorSchemeResources(R.color.colorAccent);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
jsonrequest();
}
});
return parentHolder;
}
@Override
public void onRefresh() {
jsonrequest();
}
private void jsonrequest() {
mSwipeRefreshLayout.setRefreshing(true);
mTabela = new ArrayList<>();
request = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
JSONObject jsonObject = null;
for (int i = 0; i <response.length(); i++) {
try {
jsonObject = response.getJSONObject(i);
TabelaNews tabelaNews = new TabelaNews();
tabelaNews.setId(jsonObject.getString("id"));
tabelaNews.setUrl(jsonObject.getString("url"));
tabelaNews.setImageUrl(jsonObject.getString("imageurl"));
tabelaNews.setKategoria(jsonObject.getString("kategoria"));
tabelaNews.setData(jsonObject.getString("data"));
mTabela.add(tabelaNews);
} catch (JSONException e) {
e.printStackTrace();
}
mSwipeRefreshLayout.setRefreshing(false);
}
NewsAdapter myadapter = new NewsAdapter(getContext(), mTabela);
recyclerView.setAdapter(myadapter);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mSwipeRefreshLayout.setRefreshing(false);
}
});
requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
requestQueue.add(request);
}
}
Jakies pomysły dlaczego nie dział?
Testowałem na róznych urządzeniach, nie ma znaczenia czy to Samsung czy jakiś chińczyk, jeśli ma androida 7 jest ok, na niższych nie działą :/