user1501127
user1501127

Reputation: 865

Unable to send json with HttpURLConnection

I have been looking at this over a week now and i cant find where the null pointer problem lies, this is bugging me completely and the teacher Google is not very helpful. I cant find what the real problem here...and its driving nuts! :/

I am trying to send a notification to Firebase and it does not go beyond the streamwriter, i have checked that conn is not null or the json but they are all looking good. If i use a RESTclient i can send a message successfully with correct ID key and message and it is recived by the app. The emulated phone has internet connection.

The error thrown in run looks like this:

com.android.okhttp.internal.huc.HttpURLConnectionImpl:https://fcm.googleapis.com/fcm/send. Attempt to invoke interface method 'void om.android.okhttp.internal.http.HttpStream.writeRequestHeaders(com.android.okhttp.Request)' on a null object reference.

my code:

            String FCM_URL = "https://fcm.googleapis.com/fcm/send";
            URL url = new URL(FCM_URL);     


            HttpURLConnection conn = (HttpURLConnection) url.openConnection();


            conn.setUseCaches(false);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            //set method as POST or GET
            conn.setRequestMethod("POST");
            conn.setConnectTimeout(3000);
            //pass FCM server key
            conn.setRequestProperty("Authorization", "key=" + SERVER_KEY);

            //Specify Message Format
            conn.setRequestProperty("Content-Type", "application/json");

            conn.connect();


        //Create JSON Object & pass value
        JSONObject infoJson = new JSONObject();
        infoJson.put("body", message);
        infoJson.put("title", "Test send:");

        JSONObject json = new JSONObject();
        json.put("to", tokenId);
        json.put("collapse_key", "type_a");
        json.put("notification", infoJson);

        //Add data to json string
        JSONObject datacon = new JSONObject();
        datacon.put("body","First notification");
        datacon.put("title", "Collapsing A");
        datacon.put("key_1","Data for key 1");
        datacon.put("key_2","Hello, test two");

        json.put("data", datacon);


            BufferedWriter out =
                    new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
            out.write(json.toString());
            out.flush();
            out.close();

Any help or pointers would be greatly appreciated!

Upvotes: 0

Views: 416

Answers (1)

Demonick
Demonick

Reputation: 2126

It seems there is a typo, set instead of add

conn.setRequestProperty("Content-Type", "application/json");

and after that, to be able to write

conn.connect();

Upvotes: 2

Related Questions