-1

I am new to android. I've created a list view in my application. I want to add a back button on the action bar. I've tried a lot but wasn't able to to get it done. Following is the code snippet which I've used:

public class Home extends ListActivity {

    private ProgressDialog pDialog;

    // URL to get contacts JSON
    private static String url = "http://api-11hr.anovatesoft.com/v1/list";

    // JSON Node names
    private static final String TAG_CONTACTS = "contacts";
    private static final String TAG_USERNAME = "username";
    private static final String TAG_NAME = "name";
    private static final String TAG_EMAIL = "email";
    private static final String TAG_ADDRESS = "address";
    private static final String TAG_CONTACT_NUMBER = "contactnumber";
    private static final String TAG_POSTAL_CODE = "postalcode";
    private static final String TAG_IMAGE = "image";
    SessionManager session;
    private double latitude;
    private double longitude;
    private String apikey;
    private String status;
    GPSTracker gps;


    // contacts JSONArray
    JSONArray contacts = null;

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> contactList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);

        AlertDialog.Builder alertDialog2 = new AlertDialog.Builder(
                Home.this);

// Setting Dialog Title
        alertDialog2.setTitle("Too quiet?");

// Setting Dialog Message
        alertDialog2.setMessage("Follow your favourite merchants and see what deals they're launching at the 11th Hour!");



// Setting Positive "Yes" Btn
        alertDialog2.setPositiveButton("YES",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // Write your code here to execute after dialog

                        dialog.cancel();

                    }
                });


        alertDialog2  .show();






        Gps_func();


        // Session class instance
        session = new SessionManager(getApplicationContext());

        // get user data from session
        HashMap<String, String> user = session.getUserDetails();


        // apikey
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();

        //Set name and email in global/application context
        apikey = globalVariable.getApikey();


        latitude = globalVariable.getLatitude();
        longitude = globalVariable.getLongitude();
        status = globalVariable.getStatus();



        contactList = new ArrayList<HashMap<String, String>>();

        ListView lv = getListView();

        // Listview on item click listener
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // getting values from selected ListItem

                String cost = ((TextView) view.findViewById(R.id.email))
                        .getText().toString();


                // Starting single contact activity
                Intent in = new Intent(getApplicationContext(),
                        Adds.class);

                in.putExtra(TAG_EMAIL, cost);

                startActivity(in);

            }
        });

        // Calling async task to get json
        new GetContacts().execute();
    }

    private void Gps_func() {

        gps = new GPSTracker(Home.this);

        // check if GPS enabled
        if (gps.canGetLocation()) {

            double latitude = gps.getLatitude();
            double longitude = gps.getLongitude();

            // \n is for new line
            //  Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
            Log.d("tag", "Longitude:\n" + longitude + "\n Latitude: \n" + latitude);

        } else {
            // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings
            gps.showSettingsAlert();

            if (gps.canGetLocation()) {
                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();

                // \n is for new line
                // Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
                Log.d("tag", "Longitude:\n" + longitude + "\n Latitude: \n" + latitude);

            }
        }

    }


    @Override
    protected void onRestart() {
        super.onRestart();
        Gps_func();
    }

    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(Home.this);
            pDialog.setMessage("Please wait....");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            ServiceHandler1 sh = new ServiceHandler1(apikey, latitude, longitude);


            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url, ServiceHandler1.POST);

            Log.d("Response: ", "> " + jsonStr);


            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    contacts = jsonObj.getJSONArray(TAG_CONTACTS);

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        String username = c.getString(TAG_USERNAME);
                        String name = c.getString(TAG_NAME);
                        String email = c.getString(TAG_EMAIL);
                        String address = c.getString(TAG_ADDRESS);
                        String gender = c.getString(TAG_CONTACT_NUMBER);
                        String postalcode = c.getString(TAG_POSTAL_CODE);


                        // tmp hashmap for single contact
                        HashMap<String, String> contact = new HashMap<String, String>();

                        // adding each child node to HashMap key => value

                        contact.put(TAG_EMAIL, email);


                        // adding contact to contact list
                        contactList.add(contact);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }


        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    Home.this, contactList,
                    R.layout.list_item1, new String[]{TAG_EMAIL,
            }, new int[]{
                    R.id.email,});

            setListAdapter(adapter);
        }
        public boolean onOptionsItemSelected(MenuItem item){
            Intent myIntent = new Intent(getApplicationContext(),Home.class);
            startActivityForResult(myIntent, 0);
            return true;
        }

    }


}

It throws a NullPointerException... Please give me a perfect solution. This is the log which is shown:

Unable to start activity ComponentInfo{com.example.kmi_dev.fbloginsample/com.example.kmi_dev.fbloginsample.Home}: java.lang.NullPointerException

Hans1984
  • 796
  • 11
  • 24

2 Answers2

1

If you are using support library you need to use getSupportActionBar().

Try this:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);
        ActionBar actionBar = getActionBar();
        if(actionBar == null)
                  actionBar = getActionBarSupport();
        actionBar.setDisplayHomeAsUpEnabled(true);
}

In addition make sure:

  1. you did not have this on your manifest when declaring the activity:

    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

  2. Your activity is not a child ( it is not a dialog), remove if you added this from manifest if you add when declaring the activity:

    android:theme="@android:style/Theme.Dialog"

dsharew
  • 10,377
  • 6
  • 49
  • 75
  • what do you mean by that? The above code tries to get the action bar as usual using getActionBar() but if this retuns null then it measn you are using support library and falls back go tusing getActionBarSupport(). – dsharew Jul 22 '15 at 14:00
  • Have you checked my updated answer, please read the conclusion notes. – dsharew Jul 22 '15 at 14:20
  • yup i checked your updated answer. i used th followin theme in manifest..........android:theme="@style/AppTheme" – Shivanshu Verma Jul 22 '15 at 14:34
1

First of all, you will only use getSupportActionBar() if your activity is extending an ActionBarActivity, so in your case, you must use getActionBar() like you did. The problem could be in your Theme. Make sure in your AndroidManifest.xml if you aren't using something such as android:theme="@android:style/Theme.Holo.Light.NoActionBar", because it can cause nullexception. In Addition to what you have done, you need to add

getActionBar().setHomeButtonEnabled(true); 

before

getActionBar().setDisplayHomeAsUpEnabled(true);
Lennon Spirlandelli
  • 3,131
  • 5
  • 26
  • 51