Autore Topic: Errore NullPointerException su lancio activity  (Letto 640 volte)

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Errore NullPointerException su lancio activity
« il: 12 Marzo 2013, 12:33:13 CET »
0
Buongiorno a tutti.. ho un problema..

Ho la classe MapsEhibitorsList con questo metodo:

Codice (Java): [Seleziona]
@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        if (orderedListIndicator == 0) {
                if(!items.get(position).isSection()) {
                        OrdinatedListEntryItem item = (OrdinatedListEntryItem)items.get(position);
                        Company company = businessDelegate.companyWithID(item.companyId);
                        businessDelegate.closeDBConnection();
               
                        Bundle b = new Bundle();
                        b.putParcelable("company", company);
                        b.putString("where", "exhibitors");

                        Intent i = new Intent(MapsExhibitorsList.this, MapsExhibitorDetailFromList.class);
                        i.putExtras(b);
                        startActivity(i);
                }
        } else if (orderedListIndicator == 1) {
                Company company = companySearched[position - 1];
               
                Bundle b = new Bundle();
                        b.putParcelable("company", company);
                        b.putString("where", "exhibitors");
                       
                        Intent i = new Intent(MapsExhibitorsList.this, MapsExhibitorDetailFromList.class);
                        i.putExtras(b);
                        startActivity(i);
        }
    }

Ogni volta che clicco un elemento dalla lista dovrebbe aprirmi il dettaglio presente nella classe MapsExhibitorDetailFromList:

Codice (Java): [Seleziona]
public class MapsExhibitorDetailFromList extends ListActivity implements OnClickListener {
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.maps_company_details);
                       
                        companyName = (TextView)findViewById(R.id.map_detail_company_name);
                        left = (Button)findViewById(R.id.map_exhibitor_details_left_button);
                        right = (Button)findViewById(R.id.map_exhibitor_details_right_button);
                       
                        left.setOnClickListener(this);
                        right.setOnClickListener(this);
                       
                        // Passed Events and Companies
                        Bundle b = getIntent().getExtras();
                       
                        company = b.getParcelable("company");
                        companyName.setText(company.getName().toUpperCase());
                        whereFrom = b.getString("where");

                        if (whereFrom.equals("exhibitors")) {
                                left.setText(getResources().getString(R.string.map_title));
                                right.setText(getResources().getString(R.string.mapSaloniButton));
                        } else if (whereFrom.equals("sectors")) {
                                left.setText(getResources().getString(R.string.mapBrandsButton));
                                right.setText(getResources().getString(R.string.map_title));
                        }
                       
                        refreshList();
        }

        private void refreshList() {
                mergeAdapter = new AdapterMerge();
               
                // Building FIRST part of the list with COMPANY information if company has description
                if (!company.getDesc_it().equals("") && !company.getDesc_en().equals("")) {

                        ArrayList<HashMap<String, Object>> companyDescription = new ArrayList<HashMap<String, Object>>();
                        HashMap<String, Object> map = new HashMap<String, Object>();
                       
                        map.put(KEY_COMPANY_TITLE, getResources().getString(R.string.map_company_title).toUpperCase());
                        // Check default language of the device
                        if (Locale.getDefault().getDisplayLanguage().equals("italiano"))
                                map.put(KEY_COMPANYDESCRIPTION, company.getDesc_it());
                        else
                                map.put(KEY_COMPANYDESCRIPTION, company.getDesc_en());
                       
                        companyDescription.add(map);
                        companyAdapter = new SimpleAdapter(this, companyDescription, R.layout.map_company_detail_list_item,
                                        new String[]{KEY_COMPANY_TITLE, KEY_COMPANYDESCRIPTION},
                                        new int[]{R.id.map_company_item_title, R.id.map_company_item_description});
                        mergeAdapter.addAdapter(companyAdapter);
                }

                // Building SECOND part of the list with CONTACT information
                ArrayList<HashMap<String, Object>> companyContacts = new ArrayList<HashMap<String, Object>>();
                HashMap<String, Object> map1 = new HashMap<String, Object>();
                map1.put(KEY_COMPANY_CONTACT_TITLE, getResources().getString(R.string.map_company_contact_title).toUpperCase());

                String address = company.getAddress() + ", " + company.getCity() + ", " + company.getCap() + ", " + company.getDistrict() + " - " + company.getCountry();
                String phone = getResources().getString(R.string.map_company_contact_phone) + " " + company.getPhone();
                String fax = getResources().getString(R.string.map_company_contact_fax) + " " + company.getFax();
                String email = getResources().getString(R.string.map_company_contact_email) + " " + company.getEmail();
                String website = getResources().getString(R.string.map_company_contact_website) + " " + company.getWebsite();
                map1.put(KEY_COMPANY_CONTACT_ADDRESS, address);
                map1.put(KEY_COMPANY_CONTACT_PHONE, phone);
                map1.put(KEY_COMPANY_CONTACT_FAX, fax);
                map1.put(KEY_COMPANY_CONTACT_EMAIL, email);
                map1.put(KEY_COMPANY_CONTACT_WEBSITE, website);
               
                companyContacts.add(map1);
                contactAdapter = new SimpleAdapter(this, companyContacts, R.layout.map_company_detail_contact_list_item,
                                new String[]{KEY_COMPANY_CONTACT_TITLE, KEY_COMPANY_CONTACT_ADDRESS, KEY_COMPANY_CONTACT_PHONE, KEY_COMPANY_CONTACT_FAX, KEY_COMPANY_CONTACT_EMAIL, KEY_COMPANY_CONTACT_WEBSITE},
                                new int[]{R.id.map_company_contact_item_title, R.id.map_company_contact_item_address, R.id.map_company_contact_item_phone, R.id.map_company_contact_item_fax, R.id.map_company_contact_item_email, R.id.map_company_contact_item_website});
                mergeAdapter.addAdapter(contactAdapter);

                // Building THIRD part of the list with MAP localization
                ArrayList<HashMap<String, Object>> companyLocation = new ArrayList<HashMap<String, Object>>();
                HashMap<String, Object> map2 = new HashMap<String, Object>();
                map2.put(KEY_COMPANY_MAP_TITLE, getResources().getString(R.string.map_company_map_title).toUpperCase());
               
                String stand = company.getHall() + " - " + company.getStand();
                String exposition = company.getExposition();
                String hall = "";
                // Check what is the company exposition
                if (exposition.equals("SMI"))
                        hall = getResources().getString(R.string.map_company_map_smi);
                else if (exposition.equals("EUC"))
                        hall = getResources().getString(R.string.map_company_map_euc);
                else if (exposition.equals("ARB"))
                        hall = getResources().getString(R.string.map_company_map_arb);
                else if (exposition.equals("CDA"))
                        hall = getResources().getString(R.string.map_company_map_cda);
                else if (exposition.equals("FTK"))
                        hall = getResources().getString(R.string.map_company_map_ftk);
                       
                map2.put(KEY_COMPANY_MAP_HALL, hall);
                map2.put(KEY_COMPANY_MAP_STAND, stand);
                companyLocation.add(map2);
                mapAdapter = new SimpleAdapter(this, companyLocation, R.layout.map_company_detail_map_list_item,
                                new String[]{KEY_COMPANY_MAP_TITLE, KEY_COMPANY_MAP_HALL, KEY_COMPANY_MAP_STAND},
                                new int[]{R.id.map_company_map_item_title, R.id.map_company_map_item_hall, R.id.map_company_map_item_stand});
                mergeAdapter.addAdapter(mapAdapter);

                // Building FORTH part of the list with SECTOR information
                ArrayList<HashMap<String, Object>> companySector = new ArrayList<HashMap<String, Object>>();
                HashMap<String, Object> map3 = new HashMap<String, Object>();
                map3.put(KEY_COMPANY_SECTOR_TITLE, getResources().getString(R.string.map_company_sector_title).toUpperCase());

                if (Locale.getDefault().getDisplayLanguage().equals("italiano"))
                        map3.put(KEY_COMPANY_SECTORS, company.getSector_it());
                else
                        map3.put(KEY_COMPANY_SECTORS, company.getSector_en());
               
                companySector.add(map3);
                sectorAdapter = new SimpleAdapter(this, companySector, R.layout.map_company_detail_sectors_list_item,
                                new String[]{KEY_COMPANY_SECTOR_TITLE, KEY_COMPANY_SECTORS},
                                new int[]{R.id.map_company_sector_item_title, R.id.map_company_sector_item_description});
                mergeAdapter.addAdapter(sectorAdapter);

//              separatedAdapter = new AdapterSeparatedList(this);
//              separatedAdapter.addSection(date, mergeAdapter);

                setListAdapter(mergeAdapter);
        }

        // Handler for the Agenda addons
        public void myClickHandler(View v) {
                String hall = company.getHall();
                String exposition = "";
               
                String hallValue = company.getHall();
                String standValue = company.getNostand();
               
                if (hallValue.equals("") || hallValue.equals("")) {
                        // Show alert if no hall or stand value
                        AlertDialog.Builder alt_bld;
                        final AlertDialog alert;
                        LayoutInflater inflater = (LayoutInflater) MapsExhibitorDetailFromList.this.getSystemService(LAYOUT_INFLATER_SERVICE);
                        View layout = inflater.inflate(R.layout.dialog_custom_no_connection_available, (ViewGroup) findViewById(R.id.layout_root1));

                        TextView question = (TextView) layout.findViewById(R.id.dialog_warning);
                        TextView element = (TextView) layout.findViewById(R.id.dialog_warning_message);
                        Button confirm = (Button) layout.findViewById(R.id.dialog_warning_confirm_button);
                        question.setText(getString(R.string.dialog_sorry));
                        element.setText(getString(R.string.dialog_sorry_message));

                        alt_bld = new AlertDialog.Builder(getParent());
                        alt_bld.setView(layout);
                        alt_bld.setCancelable(false);
                        alert = alt_bld.create();
                        confirm.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                        alert.dismiss();
                                }
                        });
                        alert.show();
                        ViewGroup parent = (ViewGroup) layout.getParent();
                        parent.setPadding(0, 0, 0, 0);
                } else {       
                        Bundle b = new Bundle();
                        b.putString("hall", hallValue);
                        b.putString("stand", standValue);
                        if (hall.equals("HALL 09") || hall.equals("HALL 11")) {
                                exposition = company.getExposition();
                                b.putString("exposition", exposition);
                        } else {
                                b.putString("exposition", exposition);
                        }
               
                        Intent i = new Intent(getParent(), MapFromDetail.class);
                        i.putExtras(b);
                        TabGroup parentActivity = (TabGroup)getParent();
                        parentActivity.startChildActivity("MapFromDetail", i);
                }
        }
       
        @Override
        public void onClick(View v) {
                switch(v.getId()){
                        case R.id.map_exhibitor_details_left_button:
                                if (whereFrom.equals("exhibitors")) {
                                        Intent i = new Intent(getParent(), MapsHome.class);
                                        TabGroup parentActivity = (TabGroup)getParent();
                                        parentActivity.startChildActivity("MapsHome", i);
                                } else if (whereFrom.equals("sectors")) {
                                        Intent i = new Intent(getParent(), MapsExhibitorsList.class);
                                        TabGroup parentActivity = (TabGroup)getParent();
                                        parentActivity.startChildActivity("MapsExhibitorsList", i);
                                }
                            break;
                        case R.id.map_exhibitor_details_right_button:
                                if (whereFrom.equals("exhibitors")) {
                                        Intent i = new Intent(getParent(), MapsSectorList.class);
                                        TabGroup parentActivity = (TabGroup)getParent();
                                        parentActivity.startChildActivity("MapsSectorList", i);
                                } else if (whereFrom.equals("sectors")) {
                                        Intent i = new Intent(getParent(), MapsHome.class);
                                        TabGroup parentActivity = (TabGroup)getParent();
                                        parentActivity.startChildActivity("MapsHome", i);
                                }
                            break;
                }
        }
}

Però mi va in errore sollevando una NullPointerException. Ecco il logcat:

Codice: [Seleziona]
03-12 11:11:00.160: E/AndroidRuntime(8954): FATAL EXCEPTION: main
03-12 11:11:00.160: E/AndroidRuntime(8954): java.lang.NullPointerException
03-12 11:11:00.160: E/AndroidRuntime(8954):         at cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList.onListItemClick(MapsExhibitorsList.java:177)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.widget.AdapterView.performItemClick(AdapterView.java:301)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.widget.AbsListView.performItemClick(AbsListView.java:1276)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.widget.AbsListView$PerformClick.run(AbsListView.java:3067)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.widget.AbsListView$1.run(AbsListView.java:3963)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.os.Handler.handleCallback(Handler.java:615)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.os.Handler.dispatchMessage(Handler.java:92)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.os.Looper.loop(Looper.java:137)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at android.app.ActivityThread.main(ActivityThread.java:4898)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at java.lang.reflect.Method.invokeNative(Native Method)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at java.lang.reflect.Method.invoke(Method.java:511)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-12 11:11:00.160: E/AndroidRuntime(8954):         at dalvik.system.NativeStart.main(Native Method)
03-12 11:11:00.190: E/android.os.Debug(2277): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error

Mi potete aiutare? Grazie
« Ultima modifica: 12 Marzo 2013, 12:37:45 CET da darkmax »

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Errore NullPointerException su lancio activity
« Risposta #1 il: 12 Marzo 2013, 12:39:04 CET »
0
Prova a verificare che items.get(position) non sia null...  :-\

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Errore NullPointerException su lancio activity
« Risposta #2 il: 12 Marzo 2013, 12:47:23 CET »
0
Ho verificato in debug ed è parentActivity ad essere null.. Come lo cambio?

Codice (Java): [Seleziona]
Intent i = new Intent(MapsExhibitorsList.this, MapsExhibitorDetailFromList.class);
                        i.putExtras(b);
                                TabGroup parentActivity = (TabGroup) getParent();
                                parentActivity.startChildActivity("MapsExhibitorDetailFromList", i);

getPosition restituisce correttamente la posizione.

Questo succede perchè prima il tutto era inserito in un TabGroup.. ora invece è un semplice bottone.. Ho provato a fare:

Codice (Java): [Seleziona]
Intent i = new Intent(MapsExhibitorsList.this, MapsExhibitorDetailFromList.class);
                        i.putExtras(b);
                                startChildActivity( i);

Ma non va lo stesso..
« Ultima modifica: 12 Marzo 2013, 12:54:55 CET da darkmax »