服务器发送请求firebase java.net.protocolexception在读取响应后无法写入请求主体

问题描述 投票:1回答:1

我正在尝试使用firebase发送notificaiton ...代码在7天前工作但现在我得到的是(java.net.protocolexception在读取响应后无法写入请求体)每当我调用conn.getOutputStream();

谢谢你们的帮助

URL url = null;
                try {
                    url = new URL("https://fcm.googleapis.com/fcm/send");
                    try {
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setRequestMethod("POST");
                        conn.setUseCaches(false);
                        conn.setDoInput(true);
                        conn.setDoOutput(true);
                        conn.setRequestProperty("Authorization","key=someKey");
                        conn.setRequestProperty("Content-Type", "application/json; UTF-8");
                        JSONObject data= new JSONObject();
                        JSONObject jsonObject=new JSONObject();
                        try {
                            jsonObject.put("to","/topics/all");
                            data.put("title",title.getText());
                            data.put("messages",message.getText());
                            data.put("body",message.getText());
                            if(spinner.getSelectedItemPosition()==1)data.put("getId",videoListId.getText().toString());
                            else if(spinner.getSelectedItemPosition()==2)data.put("getId",videoId.getText().toString());
                            if(spinner.getSelectedItemPosition()==1)data.put("getSubject",videoListSubject.getText().toString());
                            else if(spinner.getSelectedItemPosition()==2)data.put("getSubject",videoSubject.getText().toString());
                            if(spinner.getSelectedItemPosition()!=0) data.put("getActivity",spinner.getSelectedItem().toString());
                            data.put("img_url",downloadUri.toString());
                            jsonObject.put("data",data);
                            OutputStreamWriter wr=new OutputStreamWriter(conn.getOutputStream());//exception here
                            wr.write(String.valueOf(jsonObject));
                            wr.flush();

                            conn.getInputStream();
                            wr.close();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
java android firebase firebase-cloud-messaging httpconnection
1个回答
0
投票

我用排球库解决了这是我的解决方案......谢谢大家

void jsonRequest() {


      URL url = null;
        try {
            url = new URL("https://fcm.googleapis.com/fcm/send");
            try {
                JSONObject data= new JSONObject();
                JSONObject jsonObject=new JSONObject();
                     jsonObject.put("to","someone");
                    data.put("title",title.getText());
                    data.put("messages",message.getText());
                    data.put("body",message.getText());
                    if(spinner.getSelectedItemPosition()==1)data.put("getId",videoListId.getText().toString());
                     else if(spinner.getSelectedItemPosition()==2)data.put("getId",videoId.getText().toString());
                    if(spinner.getSelectedItemPosition()==1)data.put("getSubject",videoListSubject.getText().toString());
                    else if(spinner.getSelectedItemPosition()==2)data.put("getSubject",videoSubject.getText().toString());
                    if(spinner.getSelectedItemPosition()!=0) data.put("getActivity",spinner.getSelectedItem().toString());
                    data.put("img_url",downloadUri.toString());
                    jsonObject.put("data",data);
                JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://fcm.googleapis.com/fcm/send", jsonObject, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        Toast.makeText(NotificationActivity.this, "worked", Toast.LENGTH_SHORT).show();

                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(NotificationActivity.this, "failed", Toast.LENGTH_SHORT).show();
                    }
                }) {
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {

                        Map<String, String> params = new HashMap<String, String>();
                        params.put("Authorization","key=somekey");
                        params.put("Content-Type","application/json; UTF-8");
                        return params;
                    }
                };
                RequestQueue queue = Volley.newRequestQueue(this);
                queue.add(jsonObjectRequest);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }


    }
© www.soinside.com 2019 - 2024. All rights reserved.