Autore Topic: Errore sul metodo onBackPressed  (Letto 1064 volte)

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Errore sul metodo onBackPressed
« il: 06 Marzo 2013, 12:28:30 CET »
0
Ciao a tutti. Ho un'activity con un metodo onBackPressed che, una volta premuto il tasto back, mi fa comparire una finestra di conferma se voglio o meno uscire dall'applicazione. Il problema è che quando clicco sul tasto back l'applicazione non risponde e crasha.

Qui il codice:

Codice (Java): [Seleziona]
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Home extends Activity {

        ImageMap mImageMap;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_home);
               
               
                // find the image map in the view
        mImageMap = (ImageMap)findViewById(R.id.map);
       
        // add a click handler to react when areas are tapped
        mImageMap.addOnImageMapClickedHandler(new ImageMap.OnImageMapClickedHandler() {
                        @Override
                        public void onImageMapClicked(int id) {
                                // when the area is tapped, show the name in a
                                // text bubble
                                //mImageMap.showBubble(id);
                                switch(id){

                                  case R.id.area1001:
                                          Bundle b1 = new Bundle();    
                                          b1.putInt("Tab1", 0);
                                         
                                          final Intent Intent1001 = new Intent(Home.this, ppp.class);
                                          Intent1001.putExtras(b1);
                                          startActivity(Intent1001);
                                          break;

                                  case R.id.area1002:
                                          Intent Intent1002 = new Intent(Home.this, lll.class);
                                          startActivity(Intent1002);
                                          break;
                                       
                                  case R.id.area1004:
                                          Intent Intent1004 = new Intent(Home.this, qqq.class);
                                          startActivity(Intent1004);
                                          break;
                       
                                  case R.id.area1005:
                                          Intent Intent1005 = new Intent(Home.this, ooo.class);
                                          startActivity(Intent1005);
                                          break;
               
                                  case R.id.area1006:
                                          Intent Intent1006 = new Intent(Home.this, xxx.class);
                                          startActivity(Intent1006);
                                          break;
         
                                  case R.id.area1007:
                                          String url = getResources().getString(R.string.tickets_url);
                                          Intent Intent1007 = new Intent(Intent.ACTION_VIEW);
                                          Intent1007.setData(Uri.parse(url));
                                          startActivity(Intent1007);
                                          break;
}
                                }
                               
                       
       
                        @Override
                        public void onBubbleClicked(int id) {
                                // react to info bubble for area being tapped
                        }
                });
        }
                public void onBackPressed() {
                        AlertDialog.Builder alt_bld;
                        final AlertDialog alert;
                        LayoutInflater inflater = (LayoutInflater) Home.this.getSystemService(LAYOUT_INFLATER_SERVICE);
                View layout = inflater.inflate(R.layout.dialog_custom_closing_event, (ViewGroup) findViewById(R.id.layout_root3));
               
                TextView question = (TextView) layout.findViewById(R.id.dialog_closing_question);
                Button confirm = (Button) layout.findViewById(R.id.dialog_closing_confirm_button);
                Button deny = (Button) layout.findViewById(R.id.dialog_closing_deny_button);
                question.setText(getString(R.string.dialog_closing_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();
                                        System.exit(0);
                                }
                        });
                deny.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                        alert.dismiss();
                                }
                        });
                alert.show();
                ViewGroup parent = (ViewGroup)layout.getParent();
                parent.setPadding(0, 0, 0, 0);
               
        }
}

Questo il logcat:

Codice: [Seleziona]
03-06 12:26:42.150: E/ACRA(16214): ACRA caught a RuntimeException exception for cosmit.android.saloneDelMobile2013. Building report.
03-06 12:26:47.775: E/AndroidRuntime(16214): FATAL EXCEPTION: main
03-06 12:26:47.775: E/AndroidRuntime(16214): java.lang.RuntimeException: Unable to start activity ComponentInfo{cosmit.android.saloneDelMobile2013/cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList}: java.lang.NullPointerException
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.access$600(ActivityThread.java:140)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.Looper.loop(Looper.java:137)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.main(ActivityThread.java:4898)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at java.lang.reflect.Method.invokeNative(Native Method)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at java.lang.reflect.Method.invoke(Method.java:511)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at dalvik.system.NativeStart.main(Native Method)
03-06 12:26:47.775: E/AndroidRuntime(16214): Caused by: java.lang.NullPointerException
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList$UpdateDB.onPreExecute(MapsExhibitorsList.java:245)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.AsyncTask.execute(AsyncTask.java:534)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList.onCreate(MapsExhibitorsList.java:64)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.Activity.performCreate(Activity.java:5206)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
03-06 12:26:47.775: E/AndroidRuntime(16214):         ... 11 more

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Errore sul metodo onBackPressed
« Risposta #1 il: 06 Marzo 2013, 13:08:23 CET »
+1
Hai un errore a partire da qui:

Codice: [Seleziona]
cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList$UpdateDB.onPreExecute(MapsExhibitorsList.java:245)
Dovrebbe essere un AsyncTask che nel codice che hai postato non vedo...
I numeri contano molto di più del seme.

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Errore sul metodo onBackPressed
« Risposta #2 il: 06 Marzo 2013, 15:16:25 CET »
0
Scusa.. Ho postato il Logcat errato..

Ecco quello giusto. Appena premo il tasto back:

Codice: [Seleziona]
03-06 15:17:47.925: E/AndroidRuntime(24837): FATAL EXCEPTION: main
03-06 15:17:47.925: E/AndroidRuntime(24837): java.lang.NullPointerException
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at cosmit.android.saloneDelMobile2013.Home.onBackPressed(Home.java:109)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.app.Activity.onKeyUp(Activity.java:2192)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.view.KeyEvent.dispatch(KeyEvent.java:2729)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.app.Activity.dispatchKeyEvent(Activity.java:2431)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2009)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3813)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3761)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2926)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.os.Looper.loop(Looper.java:137)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at android.app.ActivityThread.main(ActivityThread.java:4898)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at java.lang.reflect.Method.invokeNative(Native Method)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at java.lang.reflect.Method.invoke(Method.java:511)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-06 15:17:47.925: E/AndroidRuntime(24837):         at dalvik.system.NativeStart.main(Native Method)

« Ultima modifica: 06 Marzo 2013, 15:18:42 CET da darkmax »

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Errore sul metodo onBackPressed
« Risposta #3 il: 06 Marzo 2013, 16:16:48 CET »
+1
Sembra che ci sia un problema di temi. Hai qualche cosa di personalizzato?

Comunque prova a mette:

Codice (Java): [Seleziona]
alt_bld = new AlertDialog.Builder(this);
I numeri contano molto di più del seme.

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Errore sul metodo onBackPressed
« Risposta #4 il: 07 Marzo 2013, 15:24:58 CET »
0
Ok.. risolto. Ti ringrazio.

Chiedo al volo allora anche l'altro errore che ho quando faccio lo start di un'activity..

Io ho questa classe:

Codice (Java): [Seleziona]
public class MapsExhibitorsList extends ListActivity implements OnClickListener{
       
        private Button map, sectors;
        private BusinessDelegate businessDelegate;
        private String[] companiesNames;
        private String[] companiesId;
        private Company[] companiesOrderedArray;
        private Company[] companySearched;
        private ArrayList<OrdinatedListItem> items = new ArrayList<OrdinatedListItem>();
        private ArrayList<String> indexes;
        private ArrayList<Company> sorted_array = new ArrayList<Company>();
        private EditText searchBar;
        private int textlength = 0;
        private int orderedListIndicator;
        private AdapterSeparatedList resultListAdapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.maps_exhibitors_list);
                businessDelegate = new BusinessDelegate(this);
                resultListAdapter = new AdapterSeparatedList(this);
               
                map = (Button) findViewById(R.id.map_exhibitors_left_button);
                sectors = (Button) findViewById(R.id.map_exhibitors_right_button);
                searchBar = (EditText) findViewById(R.id.map_exhibitors_searchBar);
               
                map.setOnClickListener(this);
                sectors.setOnClickListener(this);
       
        orderedListIndicator = 0;
       
                new UpdateDB(getParent()).execute();
       
        searchBar.addTextChangedListener(new TextWatcher() {
                // Abstract Method of TextWatcher Interface.
                public void afterTextChanged(Editable s) {}
               
                // Abstract Method of TextWatcher Interface.
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
               
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                        orderedListIndicator = 1;
                        textlength = searchBar.getText().length();
                        if (textlength > 0) {
                                sorted_array.clear();
                                for (int i = 0; i < companiesOrderedArray.length; i++) {
                                        if (textlength <= companiesOrderedArray[i].getName().length()) {
//                                              if(searchBar.getText().toString().equalsIgnoreCase((String) companiesOrderedArray[i].getName().subSequence(0, textlength))) {
                                        if ((companiesOrderedArray[i].getName()).toLowerCase().contains(searchBar.getText().toString().toLowerCase())) {
                                                        sorted_array.add(companiesOrderedArray[i]);
                                                }
                                        }
                                }
                                companySearched = new Company[sorted_array.size()];
                                sorted_array.toArray(companySearched);
                                String[] companySearchedNames = getCompaniesSearchedNames();
                               
                                if (companySearched.length == 0) {
                                        getListView().setTextFilterEnabled(true);
                                        setListAdapter(null);
                                } else {
                                        resultListAdapter.addSection(getString(R.string.divider_search_results),
                                                        new ArrayAdapter<String>(MapsExhibitorsList.this, R.layout.event_ordered_company_list_item, companySearchedNames));  
                                        setListAdapter(resultListAdapter);
                                }
                        } else {
                        orderedListIndicator = 0;
                                refreshListWithSections();
                        }
                }
               
               
        });
        }
       
    private void refreshListWithSections() {
        companiesNames = getCompaniesNames();
        companiesId = getCompaniesId();
       
        String numbers = "";
        String check = "";
        indexes = new ArrayList<String>();
       
        for (int i = 0; i < companiesNames.length; i++) {
                if (!Character.isLetter(companiesNames[i].charAt(0))) {
                        if (numbers.equals("")) {
                                indexes.add("#");
                                items.add(new OrdinatedListSectionItem("#"));
                                numbers = "#";
                                indexes.add("#");
                                items.add(new OrdinatedListEntryItem(companiesNames[i], companiesId[i]));
                        } else {
                                indexes.add("#");
                                items.add(new OrdinatedListEntryItem(companiesNames[i], companiesId[i]));
                        }              
                } else {
                        if (check.equals("") || !check.equals(Character.toString(companiesNames[i].charAt(0)).toUpperCase())) {
                                indexes.add(Character.toString(companiesNames[i].charAt(0)).toUpperCase());
                                items.add(new OrdinatedListSectionItem(Character.toString(companiesNames[i].charAt(0)).toUpperCase()));
                                check = Character.toString(companiesNames[i].charAt(0));
                                indexes.add(Character.toString(companiesNames[i].charAt(0)).toUpperCase());
                                items.add(new OrdinatedListEntryItem(companiesNames[i], companiesId[i]));
                        } else {
                                indexes.add(Character.toString(companiesNames[i].charAt(0)).toUpperCase());
                                items.add(new OrdinatedListEntryItem(companiesNames[i], companiesId[i]));
                        }
                }
        }
        AdapterOrdinatedListEntry adapter = new AdapterOrdinatedListEntry(this, items, indexes);
        setListAdapter(adapter);
    }
       
        @Override
        public void onClick(View v) {
                switch(v.getId()){
                        case R.id.map_exhibitors_left_button:
                                Intent i = new Intent(getParent(), MapsHome.class);
                                TabGroup parentActivity = (TabGroup)getParent();
                                parentActivity.startChildActivity("MapsHome", i);
                            break;
                        case R.id.map_exhibitors_right_button:
                                Intent i1 = new Intent(getParent(), MapsSectorList.class);
                                TabGroup parentActivity1 = (TabGroup)getParent();
                                parentActivity1.startChildActivity("MapsSectorList", i1);
                            break;
                }
        }
       
    @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(getParent(), MapsExhibitorDetailFromList.class);
                        i.putExtras(b);
                                TabGroup parentActivity = (TabGroup) getParent();
                                parentActivity.startChildActivity("MapsExhibitorDetailFromList", 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(getParent(), MapsExhibitorDetailFromList.class);
                        i.putExtras(b);
                        TabGroup parentActivity = (TabGroup) getParent();
                        parentActivity.startChildActivity("MapsExhibitorDetailFromList", i);
        }
    }
       
    // Retrive Array with company names
        public String[] getCompaniesNames() {
                ArrayList<String> allNames = new ArrayList<String>();
                for (int i = 0; i < companiesOrderedArray.length; i++) {
                        String name = companiesOrderedArray[i].getName();
                        allNames.add(name);
                }
                String[] allCompaniesNames = new String[allNames.size()];
                allNames.toArray(allCompaniesNames);
                return allCompaniesNames;
        }

        // Retrive Array with company names
        public String[] getCompaniesSearchedNames() {
                ArrayList<String> allNames = new ArrayList<String>();
                for (int i = 0; i < companySearched.length; i++) {
                        String name = companySearched[i].getName();
                        allNames.add(name);
                }
                String[] allCompaniesNames = new String[allNames.size()];
                allNames.toArray(allCompaniesNames);
                return allCompaniesNames;
        }

        // Retrive Array with company ids
        public String[] getCompaniesId() {
                ArrayList<String> allIds = new ArrayList<String>();
                for (int i = 0; i < companiesOrderedArray.length; i++) {
                        String id = companiesOrderedArray[i].getId();
                        allIds.add(id);
                }
                String[] allCompaniesIds = new String[allIds.size()];
                allIds.toArray(allCompaniesIds);
                return allCompaniesIds;
        }
       
        // AsyncTask with dialog
        private class UpdateDB extends AsyncTask<Void, String, Void> {
//              private Context context;
                private AlertDialog alertDialog;
                private AlertDialog.Builder builder;
               
                public UpdateDB(Context context) {
//                      this.context = context;
                }

                @Override
                protected void onPreExecute() {
                        LayoutInflater inflater = (LayoutInflater) MapsExhibitorsList.this.getSystemService(LAYOUT_INFLATER_SERVICE);
                        View layout = inflater.inflate(R.layout.dialog_custom_refresh_progress,(ViewGroup) findViewById(R.id.layout_root));
                        TextView text = (TextView) layout.findViewById(R.id.text);
                        text.setText(getString(R.string.dialog_progress_loading_data));
                        builder = new AlertDialog.Builder(getParent());
                        builder.setView(layout);
                        builder.setCancelable(false);
                        alertDialog = builder.create();
                        alertDialog.show();
                        ViewGroup parent = (ViewGroup) layout.getParent();
                        parent.setPadding(0, 0, 0, 0);
                }

                @Override
                protected Void doInBackground(Void... unused) {
                companiesOrderedArray = businessDelegate.allCompaniesOrderByName();
                        return null;
                }

                @Override
                protected void onPostExecute(Void unused) {
                        businessDelegate.closeDBConnection();
                        alertDialog.dismiss();
                        refreshListWithSections();
                }
        }

}

Perchè mi va in errore quando, dalla classe Home la richiamo in questo modo:

Codice (Java): [Seleziona]
Intent Intent1002 = new Intent(Home.this, MapsExhibitorsList.class);
                                          startActivity(Intent1002);

E questo è il Logcat:

Codice (Java): [Seleziona]
03-06 12:26:42.150: E/ACRA(16214): ACRA caught a RuntimeException exception for cosmit.android.saloneDelMobile2013. Building report.
03-06 12:26:47.775: E/AndroidRuntime(16214): FATAL EXCEPTION: main
03-06 12:26:47.775: E/AndroidRuntime(16214): java.lang.RuntimeException: Unable to start activity ComponentInfo{cosmit.android.saloneDelMobile2013/cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList}: java.lang.NullPointerException
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.access$600(ActivityThread.java:140)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.Looper.loop(Looper.java:137)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.main(ActivityThread.java:4898)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at java.lang.reflect.Method.invokeNative(Native Method)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at java.lang.reflect.Method.invoke(Method.java:511)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at dalvik.system.NativeStart.main(Native Method)
03-06 12:26:47.775: E/AndroidRuntime(16214): Caused by: java.lang.NullPointerException
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList$UpdateDB.onPreExecute(MapsExhibitorsList.java:245)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.os.AsyncTask.execute(AsyncTask.java:534)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at cosmit.android.saloneDelMobile2013.maps.MapsExhibitorsList.onCreate(MapsExhibitorsList.java:64)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.Activity.performCreate(Activity.java:5206)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
03-06 12:26:47.775: E/AndroidRuntime(16214):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
03-06 12:26:47.775: E/AndroidRuntime(16214):         ... 11 more

Grazie mille

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Errore sul metodo onBackPressed
« Risposta #5 il: 07 Marzo 2013, 15:37:14 CET »
+1
Prova a cambiare

Codice (Java): [Seleziona]
builder = new AlertDialog.Builder(getParent());
con

Codice (Java): [Seleziona]
builder = new AlertDialog.Builder(MapsExhibitorsList.this);
nell'onPreExecute dell'AsyncTask.

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Errore sul metodo onBackPressed
« Risposta #6 il: 07 Marzo 2013, 16:00:36 CET »
0
Prova a cambiare

Codice (Java): [Seleziona]
builder = new AlertDialog.Builder(getParent());
con

Codice (Java): [Seleziona]
builder = new AlertDialog.Builder(MapsExhibitorsList.this);
nell'onPreExecute dell'AsyncTask.

Perfetto.. Siete magici!! Grazie mille

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Errore sul metodo onBackPressed
« Risposta #7 il: 11 Marzo 2013, 10:28:55 CET »
0
Ho ancora un altro 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, 11:47:20 CET da darkmax »