Проблема запроса XML REST API с использованием Volley - PullRequest
0 голосов
/ 06 марта 2019

Я успешно проанализировал JSON методом GET с использованием библиотеки Volley, но теперь мне нужно POST XML, где я должен указать заголовок и тело, поэтому я попытался добавить их, но это вызывает ошибку com.android.volley.ServerError. Когда я использую почтальон, чтобы проверить, работает ли API, он работает нормально. Я положил

<request>    <customer system="ISDN">99069254</customer><amount>10</amount>  <description>test</description></request>

в тело, и когда я POST он дает мне ответ, но когда я пробую его на Android, он дает мне ошибку.

package com.example.john.candyapi;

import android.icu.text.StringPrepParseException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private TextView mTextViewResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextViewResult = findViewById(R.id.text_view_result);

        String URL = "https://api.candy.mn/resource/partner/v1/sell";

        //creating requestQueue object by calling newRequestQueue on Volley class
        RequestQueue requestQueue = Volley.newRequestQueue(this);



        //creating string obeject request
        StringRequest objectRequest = new StringRequest(
                Request.Method.POST,
                URL,
                new Response.Listener<String>() {
                    @Override
                    //if response is successful
                    public void onResponse(String response) {
                        Log.e("Rest Response", response.toString());
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                            Log.e("Rest Response", error.toString());
                    }
                }
        ) {

            //Set headers
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Content-Type", "application/xml");
                params.put("Authorization", "Bearer 3e3e6074e8ae9ed54b31b26b6aeb853f9b4ed9cf572eb45895d0e1f229d1be0ec55d05483bf800f0d6dbb4307e0e2989");
                return params;
            }

            //define content type of body
            @Override
            public String getBodyContentType() {
                return "application/xml; charset=" +
                        getParamsEncoding();
            }

            //Body of a request
            @Override
            public byte[] getBody() throws AuthFailureError {
                String postData =
                        "<request>"+
                        "<custormer system=\"ISDN\">99069254</customer>" +
                        "<amount>10</amount>" +
                        "<description>test</description>" +
                        "</request>"; // TODO get your final output
                try {
                    return postData == null ? null :
                            postData.getBytes(getParamsEncoding());
                } catch (UnsupportedEncodingException uee) {
                    // TODO consider if some other action should be taken
                    return null;
                }
            }

        };

        //requesting created request
        requestQueue.add(objectRequest);




    }
}

Ошибка:

2019-03-04 23:43:15.324 4497-4545/? E/ConnectivityService: RemoteException caught trying to send a callback msg for NetworkRequest [ id=6, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
2019-03-06 12:40:58.826 7210-7210/? E/Rest Response: com.android.volley.ServerError
2019-03-06 12:41:46.299 7383-7383/? E/Rest Response: com.android.volley.ServerError
2019-03-06 18:31:02.725 7570-7570/com.example.john.candyapi E/Rest Response: com.android.volley.ServerError
2019-03-06 18:32:12.700 7744-7744/com.example.john.candyapi E/Rest Response: com.android.volley.ServerError
...