Wątek przeniesiony 2020-09-28 16:01 z Java przez Shalom.

Request wysyłany jest tylko raz, podczas pierwszego ładowania Activity

0

Cześć. Mam taki problem. Kiedy wchodzę w Activity "ChooseCity" automatycznie wysyłam Request GET przy użyciu Volley który zwraca mi listę miast. Kiedy nacisnę przycisk back, wrócę do poprzedniego Activity i ponownie wejdę do Activity "ChooseCity" widzę, że Request nie jest ponownie realizowany.

Czy ktoś mógłby mi wytłumaczyć o co w tym chodzi ? W końcu po ponownym wejściu do Activity wywołują się te same metody, co za pierwszym wejściem, a jednak część metod się nie wywołuje.

**Logi **
title

ChooseCity Activity

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.EditText;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

import breakthecode.com.clickandgo.R;
import breakthecode.com.clickandgo.classes.AppSharedPreferencesHelper;
import breakthecode.com.clickandgo.entity.City;
import breakthecode.com.clickandgo.recyclerviews.CitiesFromRecViewAdapter;
import breakthecode.com.clickandgo.temporary.ClassOfTempLists;


public class ChooseCityFromActivity extends AppCompatActivity {
    private static final String TAG = "myLogs ChooseCity";

    private static String SERVER_URL = "***";

    private AppSharedPreferencesHelper sharedPrefs;
    private boolean isCityFromPicked, isCityToPicked;

    private RecyclerView cityRecView;
    private EditText chooseCityFromSearchEditText;

    private List<City> listOfCities;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choose_city_from);

        settings();
        loadData();
        initWidgets();
        loadWidgetsData();
        setOnClickListeners();
        setUpRecyclerView();

    }
    private void settings(){
        Log.d(TAG, "settings: ");
        getSupportActionBar().hide();
    }

    private void initWidgets(){
        Log.d(TAG, "initWidgets: ");
        cityRecView = findViewById(R.id.choose_cityFrom_recView);
        chooseCityFromSearchEditText = findViewById(R.id.chooseCityFromSearchEditText);
        chooseCityFromSearchEditText.setFocusableInTouchMode(true);
    }

    private void setOnClickListeners(){
        Log.d(TAG, "setOnClickListeners: ");

    }

    private void setUpRecyclerView(){
        Log.d(TAG, "setUpRecyclerView: ");
        listOfCities = new ArrayList<>();
        requestListOfAllCities();
    }

    private void loadData(){
        Log.d(TAG, "loadData: ");
        sharedPrefs = new AppSharedPreferencesHelper(this, "Shared_Preferences");
        isCityFromPicked = sharedPrefs.isCityFromPicked();
        isCityToPicked = sharedPrefs.isCityToPicked();
    }
    private void loadWidgetsData(){
        Log.d(TAG, "loadWidgetsData: ");
    }

    public void requestListOfAllCities(){
        Log.d(TAG, "requestListOfAllCities: ");
        SERVER_URL = SERVER_URL + "/api/cities";
        listOfCities = new ArrayList<>();
        RequestQueue queue = Volley.newRequestQueue(this);
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, SERVER_URL, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.d(TAG, "onResponse: ");
                for (int i = 0; i < response.length(); i++) {
                    try {
                        JSONObject songObject = response.getJSONObject(i);
                        City city = new City();
                        city.setId(songObject.getInt("id"));
                        city.setCityName(songObject.getString("cityName"));
                        city.setBusStopName(songObject.getString("busStopName"));

                        listOfCities.add(city);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                sharedPrefs.setListOfCitiesFromRequest(listOfCities);
                CitiesFromRecViewAdapter adapter = new CitiesFromRecViewAdapter(getApplicationContext());
                cityRecView.setAdapter(adapter);
                cityRecView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
                cityRecView.setItemAnimator(new DefaultItemAnimator());
                layoutAnimation(cityRecView);
                adapter.setListOfCities(listOfCities);
                adapter.notifyDataSetChanged();

            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        queue.add(jsonArrayRequest);
    }
    private void layoutAnimation(RecyclerView recView){
        Log.d(TAG, "layoutAnimation: ");
        Context context = recView.getContext();
        LayoutAnimationController layoutAnimationController = AnimationUtils.loadLayoutAnimation(context, R.anim.layout_fall_down);
        recView.setLayoutAnimation(layoutAnimationController);
        recView.getAdapter().notifyDataSetChanged();
        recView.scheduleLayoutAnimation();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
        chooseCityFromSearchEditText.clearFocus();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Log.d(TAG, "onBackPressed: ");
        Intent intent = new Intent(ChooseCityFromActivity.this, MainPanelActivity.class);
        startActivity(intent);
    }
}
1
      @Override
            public void onErrorResponse(VolleyError error) {

            }

może tutaj coś wpada i to olewasz całkiem? :) Najłatwiej Ci będzie odpalić debugger i sprawdzić co gdzie i kiedy sie wywołuje

0
baant napisał(a):
      @Override
            public void onErrorResponse(VolleyError error) {

            }

może tutaj coś wpada i to olewasz całkiem? :) Najłatwiej Ci będzie odpalić debugger i sprawdzić co gdzie i kiedy sie wywołuje

Masz racje. Za drugim razem leci 09-28 1600.341 11557-11557/breakthecode.com.clickandgo D/myLogs ChooseCity: onErrorResponse:

Wiesz jaki może być tego powód ?

1

Wypisz error w Log.d() to się dowiemy.

2

postaw tam breakpoint i odpal aplikacje w trybie debug zamiast zgadywać po logach co sie kiedy dzieje. Korzystasz pewnie z Android Studio, wiec nie powinno byc problemu

1
dbCooper napisał(a):

Wypisz error w Log.d() to się dowiemy.

Błąd 404.

HTTP 404 lub Not Found – kod błędu odpowiedzi HTTP wskazującego na to, że klient jest w stanie komunikować się z serwerem, ale ten nie może znaleźć żądanego pliku, lub jest on skonfigurowany, aby nie spełnić żądania i nie wyświetlać informacji.

Ale jak to ? Przecież wykonuje się dobre zapytanie w dobre miejsce

1
RezyserKinaAkcji napisał(a):
dbCooper napisał(a):

Wypisz error w Log.d() to się dowiemy.

Błąd 404.

HTTP 404 lub Not Found – kod błędu odpowiedzi HTTP wskazującego na to, że klient jest w stanie komunikować się z serwerem, ale ten nie może znaleźć żądanego pliku, lub jest on skonfigurowany, aby nie spełnić żądania i nie wyświetlać informacji.

Ale jak to ? Przecież wykonuje się dobre zapytanie w dobre miejsce

A skąd ta pewność? Nie doklejasz czegoś do linka za każdym razem jak ktoś tam wejdzie?
Dokładnie to chyba ten kawałek kodu psuje sprawę

SERVER_URL = SERVER_URL + "/api/cities";
0
UglyMan napisał(a):
RezyserKinaAkcji napisał(a):
dbCooper napisał(a):

Wypisz error w Log.d() to się dowiemy.

Błąd 404.

HTTP 404 lub Not Found – kod błędu odpowiedzi HTTP wskazującego na to, że klient jest w stanie komunikować się z serwerem, ale ten nie może znaleźć żądanego pliku, lub jest on skonfigurowany, aby nie spełnić żądania i nie wyświetlać informacji.

Ale jak to ? Przecież wykonuje się dobre zapytanie w dobre miejsce

A skąd ta pewność? Nie doklejasz czegoś do linka za każdym razem jak ktoś tam wejdzie?

Tak, dokładnie tak jak zauważyłeś. Zapomniałem o tym. Dzięki kolego. Rozwiązałeś problem. Pozdrawiam :)

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