Skocz do zawartości
woligmeat

Pobranie ID wiersza z bazy SQL

    Rekomendowane odpowiedzi

    Napisano (edytowane)

    Witam,

    jestem początkującym pasjonatem kodowania aplikacji  na Androida. To jest mój pierwszy post na tym forum. Jeżeli popełniam jakąś gafę to proszę o wyrozumiałość.

    Proszę szacowne grono ekspertów o pomoc w rozwiązaniu problemu dotyczącego wrzucenia elementów (to są dane klienta: id, name, surname, phone) z bazy danych MySQL do ListView. To stanowi jeden wiersz w ListView. Po naciśnięciu wiersza w ListView otwiera się nowa intencja z podglądem klienta.

    Mam już tak w metodzie onPostExecute:

    for (int i=0; i < customers.length(); i ++) {
        JSONObject customer = customers.getJSONObject(i);
        int customer_id = customer.getInt("customer_id");
        String customer_name = customer.getString("customer_name");
        String customer_surname = customer.getString("customer_surname");
        int customer_phone_number = customer.getInt("customer_phone_number");
        String customer_verify = customer.getString("customer_phone_number");
        String customer_registrationdate = customer.getString("customer_registrationdate");
        // String line = customer_id + "\n" + customer_name + " "+ customer_surname + "\n" + customer_phone_number + "\n" + "DATA REJESTRACJI: " + customer_registrationdate;
        //adapter.add(line);
    }

    W powyższym przykładzie wszystko wrzucałem do String line, ciężko z tego później wyciągnąć id, które posłuży do przekazania do nowej intencji i na podstawie tego id uzyskać cały profil klienta.

     Oczywiście takie rozwiązanie ja zaproponowałem.

    EDIT:
    Wpadłem na taki pomysł:
    adapter.add(customer_id + "\n" + customer_name + " " + customer_surname + "\n" + customer_phone_number);

    tylko jak teraz przekazać customer_id do kolejnej intencji po naciśnięciu el. w listview?

     

    EDIT:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    
                    //Toast.makeText(CustomerListActivity.this, adapter.getItem(i).toString(), Toast.LENGTH_SHORT).show();
    
                    //setResult(RESULT_OK, new Intent().putExtra(String.valueOf(ViewCustomer.class),i));
    
                      //Intent intent = new Intent(in, ViewCustomer.class);
    //                intent.putExtra("name", myText);
                        // Intent intent = (Intent) new Intent(null, ViewCustomer.class);
                        Intent intent = (Intent) new Intent(getApplicationContext(), ViewCustomer.class);
                        intent.putExtra(null, i);
                        startActivity(intent);
                        finish();
    
    
                }
            });

     

    Jednak brakuje mi przekazania customer_id do nowej intencji

    Edytowane przez XmakCreative
    Nowy pomysł

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)

    Potrzebujesz tutaj własnego adaptera listy. Nie jestem zbytnim fanem ListView. Wolę używać RecyclerView. Nawet ostatnio dodałem przykład implementacji:

    Tutaj bezpośredni odnośnik

     

     

    Edytowane przez Coders Lab
    Odnośnik nie prowadził wprost do odpowiedniego komentarza

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Chyba się źle wyraziłem chodzi o to żeby przekazać customer_id z onPostExecute do metody onItemClick a potem uzyje put żeby przekazać do nowej intencji.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Aby przekazać gdzieś tylko id musisz mieć do niego bezpośredni dostęp. Aby wyświetlić wszystko na temat customera nie wrzucaj tego do Stringa :)  Możesz zrobić własny adapter, który będzie przyjmował wprost Twojego customera.  Najpierw utwórz klasę dla customera np.:
     

    //oczywiście Twoja będzie bardziej rozbudowana
    class Customer {
        Int id;
        String customerName;
        //kolejne pola
    
        public Customer(Int id, String customerName) {
            this.id = id;
            this.customerName = customerName;
            //itd...
        }
    
        public Int getId() {
            return id;
        }
      
      //Ważne z powodu używanego adaptera - wyświetla on to co znajduje zwraca metoda toString()
      @Override
        public String toString() {
            return id + "\n" + customerName // tutaj dalej co tylko bedziesz chciał np.: + " " + customer_surname + "\n" + customer_phone_number; 
        }
    
    }

    Następnie będziesz mógł swojego JSONa wprost umieścić w obiekcie klasy:

    Gson gson = new Gson();
    Customer customer = gson.fromJson(customers.getJSONObject(i), Customer.class)

    Tutaj użyłem Gson - musisz sobie tą bibliotekę dodać do dependency w build.gradle.

    Teraz potrzeba nowego adaptera. W Twoim przypadku, gdy chcesz mieć dostęp tylko do id to być może wystarczy ArrayAdapter<Custome>:

    ArrayAdapter<Customer> adapter = new ArrayAdapter<Customer>(this, TWÓJ_LAYOUT, /*Twója lista danych*/ new ArrayList<Customer>());
    TwojaListView.setAdapter(adapter);


    Wtedy dodanie nowego elementu do listy będzie wyglądać następująco:

    adapter.add(customer);

    I w metodzie onItemClick będziesz mógł zrobić:

     adapter.getItem(i).getId()

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x