• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Android ListView Adapter - on a null object reference

Object Storage Arubacloud
0 głosów
341 wizyt
pytanie zadane 19 stycznia 2018 w Java przez gruby1418 Nowicjusz (120 p.)

Witam,

Piszę aplikację na studia, na zaliczenie. 

Mam problem z wywołaniem addaptera dla drugiego listview. Obecnie wygląda to tak:


package pl.nowacki.mikolaj.frontendpizza;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Typeface;
import android.media.Image;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.design.internal.BottomNavigationItemView;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Text;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import pl.nowacki.mikolaj.frontendpizza.Product;

public class MenuActivity extends AppCompatActivity {
    //deklaracja zmiennych
    private BottomNavigationView bottomMenu;
    ArrayList<String> items = new ArrayList<String>();
    private JSONArray array;
    private ListView list;
    private ListView list2;
    Product[] produkty;
    private String url = "http://mikolaj.pracainzynierska.hekko24.pl/images/mini/";
    private PopupWindow mPopupWindow;
    private LinearLayout linearLayout;
    //koniec
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        Intent intent = getIntent();
        String item = intent.getStringExtra("Kategorie");
        try {
            array = new JSONArray(item);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        bottomMenu = (BottomNavigationView) findViewById(R.id.bottomMenu);
        bottomMenu.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.action_bootomMenu_menu:
                        //menu
                        break;

                    case R.id.action_bootomMenu_szukaj:
                        //szukajka
                        break;

                    case R.id.action_bootomMenu_koszyk:
                        //koszyk
                        break;
                }

                return true;
            }
        });
        //spinner begin
        Spinner dynamicSpinner = (Spinner) findViewById(R.id.spinnerList);

        for (int i = 0; i < array.length(); i++) {
            try {
                JSONObject explrObject = array.getJSONObject(i);
                items.add(explrObject.getString("nazwa"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, items);

        dynamicSpinner.setAdapter(adapter);

        dynamicSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
               // Log.v("item", (String) parent.getItemAtPosition(position));
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub
            }
        });
        //spiner end

        //lista_produktów

        list = (ListView) findViewById(R.id.listView1);

        produkty = new Product[]{
                new Product(1,1000,"Parmesan", "Hard, granular cheese","PIZZA","30CM", "20"),
                new Product(2,1002,"Ricotta", "Italian whey cheese","PIZZA","40CM", "30"),
                new Product(3,1003,"Fontina", "Italian cow's milk cheese","PIZZA","60CM", "40"),
                new Product(4,1004,"Mozzarella", "Southern Italian buffalo milk cheese","Makaron","100gram", "20"),
                new Product(5,1005,"Cheddar", "Firm, cow's milk cheese","PIZZA","300CM", "200"),
        };

        final ArrayAdapter<Product> popupadapter =
                new ArrayAdapter<Product>(this, 0,produkty) {
                    @Override
                    public View getView(int position,
                                        View convertView,
                                        ViewGroup parent) {
                        final Product currentProduct = produkty[position];
                        if(convertView == null) {
                            ViewHolder viewHolder2 = new ViewHolder();
                            convertView = getLayoutInflater()
                                    .inflate(R.layout.one_item_popup_layout, null, false);
                            viewHolder2.popup_cena = (TextView) convertView.findViewById(R.id.cena);
                            viewHolder2.popup_ilosc = (EditText) convertView.findViewById(R.id.popup_ilosc_sztuk);
                            viewHolder2.popup_jednostka = (TextView) convertView.findViewById(R.id.Jednostka);
                            viewHolder2.popup_minus = (ImageView) convertView.findViewById(R.id.ic_minus);
                            viewHolder2.popup_plus = (ImageView) convertView.findViewById(R.id.ic_plus);
                            viewHolder2.popup_zamow = (Button) convertView.findViewById(R.id.button_popup_zamow);
                            convertView.setTag(viewHolder2);
                        }

                        //listview_popup
                        TextView popup_jednostka =((ViewHolder) convertView.getTag()).popup_jednostka;
                        TextView popup_cena =((ViewHolder) convertView.getTag()).popup_cena;
                        ImageView popup_plus =((ViewHolder) convertView.getTag()).popup_plus;
                        ImageView popup_minus =((ViewHolder) convertView.getTag()).popup_minus;
                        EditText popup_ilosc=((ViewHolder) convertView.getTag()).popup_ilosc;
                        Button popup_zamow =((ViewHolder) convertView.getTag()).popup_zamow;

                        popup_jednostka.setText(currentProduct.jednostka);
                        //popup_cena.setText(currentProduct.cena);
                                /*popup_zamow.setOnClickListener(new View.OnClickListener() {
                                    public void onClick(View v) {
                                        Toast.makeText(finalConvertView.getContext(), "Produkt dodano do koszyka.", Toast.LENGTH_SHORT).show();

                                    }



                                });*/

                        //endlistview_popup

                        return convertView;
                    }
                };

       ArrayAdapter<Product> productArrayAdapter =
                new ArrayAdapter<Product>(this, 0, produkty) {
                    @Override
                    public View getView(int position,
                                        View convertView,
                                        ViewGroup parent) {
                        final Product currentProduct = produkty[position];
                        if(convertView == null) {
                            convertView = getLayoutInflater()
                                    .inflate(R.layout.one_item, null, false);
                            ViewHolder viewHolder = new ViewHolder();
                            viewHolder.product_name = (TextView)convertView.findViewById(R.id.nazwa_produktu);
                            viewHolder.product_description = (TextView)convertView.findViewById(R.id.skladniki);
                            viewHolder.product_image = (ImageView) convertView.findViewById(R.id.list_image);
                            viewHolder.product_id_zamow = currentProduct.id_produktu;
                            viewHolder.product_button = (Button) convertView.findViewById(R.id.button_zamow);
                            convertView.setTag(viewHolder);
                        }





                        TextView produkt_nazwa =((ViewHolder)convertView.getTag()).product_name;
                        TextView produkt_skladniki =((ViewHolder)convertView.getTag()).product_description;
                        ImageView produkt_zdjecie = ((ViewHolder)convertView.getTag()).product_image;
                        Button produkt_przycisk = ((ViewHolder) convertView.getTag()).product_button;
                        Picasso.with(convertView.getContext()).load(url + currentProduct.id_towar_zdjecie+".jpg").into(produkt_zdjecie);
                        produkt_nazwa.setText(currentProduct.nazwa);
                        produkt_skladniki.setText(currentProduct.skladniki);
                        linearLayout = (LinearLayout) findViewById(R.id.zamow);
                        produkt_przycisk.setOnClickListener(new View.OnClickListener() {
                            public void onClick(View v) {

                                //popupwindow
                                        LayoutInflater inflater = (LayoutInflater) v.getContext().getSystemService(LAYOUT_INFLATER_SERVICE);

                                        // pobranie custom layout popup
                                        View customView = inflater.inflate(R.layout.popup_layout,null);


                                        // Initialize a new instance of popup window
                                        mPopupWindow = new PopupWindow(
                                                customView,
                                                ViewGroup.LayoutParams.WRAP_CONTENT,
                                                ViewGroup.LayoutParams.WRAP_CONTENT
                                        );


                                        // wywolanie potrzebuje sdk min 21
                                        if(Build.VERSION.SDK_INT>=21){
                                            mPopupWindow.setElevation(5.0f);
                                        }


                                        list2 = (ListView) findViewById(R.id.popuplistview);
                                        list2.setAdapter(popupadapter);
                                        ImageButton closeButton = (ImageButton) customView.findViewById(R.id.ib_close);

                                        closeButton.setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {
                                                // close
                                                mPopupWindow.dismiss();
                                            }
                                        });
                                        mPopupWindow.showAtLocation(linearLayout, Gravity.CENTER,0,0);



                                //end popup
                                    }
                                });



                        return convertView;

                    }
                };

        list.setAdapter(productArrayAdapter);


        //lista end
    }


    static class ViewHolder{
        public TextView product_name;
        public TextView product_description;
        public ImageView product_image;
        public int product_id_zamow;
        public Button product_button;
        public TextView popup_jednostka;
        public TextView popup_cena;
        public ImageView popup_plus;
        public ImageView popup_minus;
        public EditText popup_ilosc;
        public Button popup_zamow;
    }

}

Wygląd pierwszego listview:  menu_listview

Jak powinien wyglądać drugi list view(nie wygląda, bo gdy chce go wywołać wysypuje się aplikacja o tym za chwilę):  popup_one_item

 

Po naciśnięciu przycisku zamów z menu_listview otrzymuje taki o to błąd:

Kod błędu (niestety nie mogłem wstawić jako kod - limit znaków).

Poszukałem trochę w internecie i nie znalazłem niestety podobnych przypadków (czyli na 100% zrobiłem coś źle), nie wiem już niestety co zrobić. Chciałbym, żeby po naciśnięciu przycisku zamów, pokazało się okienko popup, które bedzię wyglądać jak obrazek one_iteam, uzupełnione danymi z tablicy produkty (na razi się nie ustawia wiem, chciałem, żeby mi się cokolwiek pokazało, wtedy pójdę dalej). Podsunie ktoś gdzie szukać błędów? Albo co warto przeczytać, żeby naprawić ten błąd? Dziękuje bardzo za udzieloną mi pomoc!

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 180 wizyt
0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 15 lutego 2018 w Java przez Partyjny Obywatel (1,170 p.)
+1 głos
1 odpowiedź 750 wizyt
pytanie zadane 6 grudnia 2018 w Java przez kvbq Obywatel (1,490 p.)

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...