-1

In my app, I want to access web service using post. I wrote some code, When i press save button in my fragment, App unfortunately stopped, I dont know what i make mistake.Please anyone fix

Here my code:

At the time of save button pressed below coding execute

VehicleFragment.java:

StringEntityHC4 input;

try {
    jsonObject.put("func",func);
    jsonObject.put("crud","insert");
    jsonObject.put("licenseplate","'"+plate_number.getText().toString()+"'");
    jsonObject.put("email","'"+"admin@gmail.com"+"'");
    jsonObject.put("make","'"+vehicleMake.getSelectedItem().toString()+"'");
    jsonObject.put("year",manu_year.getText().toString());
    jsonObject.put("type","'"+vehicleType.getSelectedItem().toString()+"'");
    jsonObject.put("model", "'"+model.getSelectedItem().toString()+"'");
    jsonObject.put("mobile","'"+"9090909090"+"'");

    input = new StringEntityHC4(jsonObject.toString());
    input.setContentType("application/json");
    input.setContentEncoding("UTF-8");
} catch (JSONException e) {
    e.printStackTrace();
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

Log.v("Test", "JSON" + jsonObject);

makeVehicleHttpPostRequest(jsonObject);
Toast.makeText(getActivity().getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();

Webservice connection method:

public void makeVehicleHttpPostRequest(JSONObject jsonObject) {

        // Show Progress Dialog
        prgDialog.show();

        try {
            String wsurl = "http://XXXXXXX.com";
            AsyncHttpClient client = new AsyncHttpClient();

            client.post(getActivity().getApplicationContext(), wsurl, input, "application/json", new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                    // Hide Progress Dialog
                    prgDialog.hide();
                    try {
                        // JSON Object
                        JSONObject obj = new JSONObject(new String(responseBody));
                        Log.d("Vehicle Save", obj.toString());

                        //******* Throw error Here************

                        Log.d("GetActivity:",String.valueOf(getActivity()));

                        //****************
                        Log.d("GetApplication:",String.valueOf(getActivity().getApplicationContext()));
                        // When the JSON response has status boolean value assigned with true
                        if (obj.getBoolean("status")) {
                        Toast.makeText(getActivity().getApplicationContext(), "You are successfully saved!", Toast.LENGTH_LONG).show();
                        }
                        // Else display error message
                        else {
                        Toast.makeText(getActivity().getApplicationContext(),obj.getString("msg"), Toast.LENGTH_LONG).show();
                        }
                    } catch (JSONException e) {
                        Toast.makeText(getActivity().getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }
                }

                @Override
                public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                    // Hide Progress Dialog
                    prgDialog.hide();
                    // When Http response code is '404'
                    if (statusCode == 404) {
                        Toast.makeText(getActivity().getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
                    }
                    // When Http response code is '500'
                    else if (statusCode == 500) {
                        Toast.makeText(getActivity().getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
                    }
                    // When Http response code other than 404, 500
                    else {
                        Toast.makeText(getActivity().getApplicationContext(), "Check your internet connection", Toast.LENGTH_LONG).show();
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Logcat:

10-08 16:31:56.948  12940-12940/com.h2o E/AsyncHttpResponseHandler﹕ User-space exception detected!
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()' on a null object reference
            at com.h2o.VehicleFragment$10.onSuccess(VehicleFragment.java:813)
            at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:360)
            at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:184)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5343)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
10-08 16:31:56.948  12940-12940/com.h2o D/AndroidRuntime﹕ Shutting down VM
    --------- beginning of crash
10-08 16:31:56.949  12940-12940/com.h2o E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.h2o, PID: 12940
    java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()' on a null object reference
            at com.loopj.android.http.AsyncHttpResponseHandler.onUserException(AsyncHttpResponseHandler.java:313)
            at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:404)
            at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:184)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5343)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()' on a null object reference
            at com.h2o.VehicleFragment$10.onSuccess(VehicleFragment.java:813)
            at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:360)
            at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:184)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5343)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
ThomasThiebaud
  • 11,331
  • 6
  • 54
  • 77
rahman
  • 31
  • 1
  • 6
  • Possible duplicate of [What is a Null Pointer Exception, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – Selvin Oct 08 '15 at 11:16
  • obviously `getActivity()` returns `null` .... obviously, **becuase you are calling this method at wrong time in Fragment's lifecycle** .... fx: you are doing somthing stupid like `new MyFragment().makeVehicleHttpPostRequest(...)` – Selvin Oct 08 '15 at 11:17
  • Could you tell.. What i do. – rahman Oct 08 '15 at 11:19
  • 1
    *Could you tell.. What i do* ... I don't know what you do(but mostlikely you are just copying and pasting without understanding)... but I know what you should do ... you should learn basics about how to use fragments and fragment's lifecycle – Selvin Oct 08 '15 at 11:21

1 Answers1

-1

Try using Context context; (Before onCreate() method ) context = YourActivityName.this; or context = getActivity(); (in onCreate()) and replace getActivity().getApplicationContext() with context everywhere.Clean the project and run. make sure rest everything is working fine.

  • What is working? `context = getActivity();` inside `onCreate()` ... i don't think so(as you would get the same error) ... the you used: `context = YourActivityName.this;` then you completly misused the Fragment by making Fragment a non static class inside Activity. seriously? how it could be recreated? you will get nice : *"Unable to instantiate fragment make sure class name exists, is public, and has an empty constructor that is public"* ... **if second solution works then you don;t need sublass of fragment at all!** – Selvin Oct 08 '15 at 11:48