Wyswietlanie JSON w android <7 nie działa

0

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łą :/

1

Jakieś błędy generuje?

0

Nie. Po prostu nic nie wyświetla :/

0

Próbowałeś użyć ADB?

1
piotr156 napisał(a):

Nie. Po prostu nic nie wyświetla :/

Zawsze coś wyświetla. Debug - adb. Bez tego ani rusz. Zakładka Logcat w Android Studio, patrz tam.

0

Ok, jestem bardzo początkujący więc po kolei :)
Aplikacje pisałem i sprawdzałem na S7 z android 7.0, potem wrzuciłem ją do google play i instalowałem ją na telefonach znajomych :)
Wtedy odkryłem, że nie działa wszystko tak jak powinno.
Rozumiem, że powinienem podłaczyć jakis telefon z androidem < 7 i uruchomić na nim apkę z poziomu android studio a nastepnie sprawdzić logi, tak?

Szukać czegos konkretnego?

0

Dobra, znalazłem telefon z Androidem 6 (Galaxy A 2015), podłączyłem, uruchomiłem aplikacje
Logcat wyświetliło takie błędy

05-13 2140.012 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2140.032 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2142.932 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2143.222 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2143.252 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2147.162 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2147.182 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2152.072 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2152.102 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2154.432 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2154.472 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2156.462 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2156.482 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2100.162 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2100.192 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2106.382 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2106.382 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2106.462 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2106.462 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2110.942 2772-2772/com.example.apk E/MotionRecognitionManager: mSContextService = null
05-13 2110.942 2772-2772/com.example.apk E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@84af43a
05-13 2111.112 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2111.232 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2122.512 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2122.522 2772-2772/com.example.apk E/ViewRootImpl: sendUserActionEvent() mView == null
05-13 2130.582 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2130.582 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2130.662 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2130.662 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.252 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.252 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.252 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.342 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.342 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.342 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.812 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2138.952 2772-14052/com.example.apk E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
05-13 2139.502 2772-14075/com.example.apk E/File: fail readDirectory() errno=2
05-13 2128.652 2772-3078/com.example.apk E/chromium: [ERROR:gl_context_virtual.cc(39)] Trying to make virtual context current without decoder.
05-13 2130.122 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2130.142 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.212 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2133.452 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2138.552 2772-2772/com.example.apk E/MotionRecognitionManager: mSContextService = null
05-13 2138.552 2772-2772/com.example.apk E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@d20abce
05-13 2158.082 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2158.082 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2158.082 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2158.182 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2158.182 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2158.182 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2158.432 2772-3078/com.example.apk E/chromium: [ERROR:gl_context_virtual.cc(39)] Trying to make virtual context current without decoder.
05-13 2158.612 2772-2772/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2102.752 2772-2772/com.example.apk E/MotionRecognitionManager: mSContextService = null
05-13 2102.752 2772-2772/com.example.apk E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@a0a37dc
05-13 2109.312 2772-2772/com.example.apk E/ViewRootImpl: sendUserActionEvent() mView == null

Logcat na androidzie 7 Galaxy S7 wygląda tak:

05-13 2123.156 15777-15777/? E/Zygote: v2
05-13 2123.157 15777-15777/? E/Zygote: accessInfo : 0
05-13 2123.713 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2123.713 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2123.713 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2123.762 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2123.762 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2129.615 15777-15777/com.example.apk E/BoostFramework: BoostFramework() : Exception_1 = java.lang.ClassNotFoundException: Didn't find class "com.qualcomm.qti.Performance" on path: DexPathListlib64
05-13 2130.075 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2130.091 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2137.263 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2137.278 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2138.521 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2138.540 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2140.038 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2140.049 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2141.596 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2141.596 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2141.613 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2141.614 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2143.267 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2143.330 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2146.228 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2146.247 15777-15777/com.example.apk E/ViewRootImpl: sendUserActionEvent() mView == null
05-13 2152.695 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2152.713 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2153.185 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2153.196 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2153.704 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2153.716 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2154.691 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2156.690 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout
05-13 2156.695 15777-15777/com.example.apk E/RecyclerView: No adapter attached; skipping layout

Ktoś mi może z tym pomóc?

0

A w ogóle ci zwraca prawidłowy wynik? Może nie ustawiasz adaptera, bo wchodzi w onError, a błąd olewasz i nigdy się o nim nie dowiesz

0

Za bardzo nie rozumiem pytania :) Jak już wczesniej napisałem jestem mocno początkujący ;)

Jesli chodzi o działanie aplikacji to na Android 7 działa na 6 i niższych nie. I żeby było smiesznie to tylko ten fragment gdzie w zmiennnej dodaje cześć url.

0

Czego nie rozumiesz? Sprawdź, czy nie wchodzi do onErrorResponse, czyli czy nie dostajesz błędu. Teraz w ogóle tego nie sprawdzasz.

0

Czyli tu:

@Override
            public void onErrorResponse(VolleyError error) {

                mSwipeRefreshLayout.setRefreshing(false);
            }

wstawić np

Toast.makeText(getActivity(), "BŁĄD" ,Toast.LENGTH_LONG).show();

Tak?

0

Nie. Naucz się debuggować. A w ten sposób, czy zobaczysz treść błędu? Toast ewentualnie pokaże ci napis "Błąd" i co, wiesz jaki błąd? Sprawdź sobie co zawiera zmienna error. (o ile w ogóle poleciał tu błąd, to właśnie masz sprawdzić).

0
Log.e("Error", error);

Dobrze kombinuję? ;)

Ja wiem, że moje pytania mogą być głupie ale jestem 100% samoukiem. Nawet nie znam fizycznie nikogo kto programuje dla Androida więc nie mam do kogo wpaść i powiedzieć "Ej, jak sprawdzić błędy?".
Zdaję sobie sprawę z braków w podstawach ale czy to ma mnie zniechęcić? ;)

1

Nie jesteś w 100% samoukiem, kiedy pytasz na forum :P

1

Dopóki nie dostanę odpowiedzi to jestem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1