Выполнить почтовый запрос (Json), используя залп - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь отправить запрос POST, используя Volley, который содержит тело json. Я заметил, что у этой библиотеки есть другой связанный с S.O вопрос, но НЕ обращаюсь к моему конкретному случаю использования соответствующим образом. Моя команда и я пробовали разные обходные пути, но безуспешно.

Я пробовал разные варианты представленного кода и не могу заставить что-либо работать в контексте отправки чего-либо, содержащегося в теле. То, что я пытаюсь сделать, это (1) сообщение (2) в этом сообщении включить base64 в этом теле. Я должен упомянуть, что конечная точка в этом случае работает и подтвердила с помощью сетевых перехватчиков, а также, глядя на серверную часть, это действительно не отправляет данные в теле.

public class MainActivity extends AppCompatActivity {
    private TextView mTextMessage;
    private Uri capturedImageUri = null;
    static final int REQUEST_IMAGE_CAPTURE = 1;
    private ImageView imageView;
    final Context context = this;

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    mTextMessage.setText(R.string.title_home);
                    return true;
                case R.id.navigation_dashboard:
                    mTextMessage.setText(R.string.title_dashboard);
                    return true;
                case R.id.navigation_notifications:
                    mTextMessage.setText(R.string.title_notifications);
                    return true;
            }
            return false;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // mTextMessage = (TextView) findViewById(R.id.message);
        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        Button btnCamera = (Button) findViewById(R.id.btnCamera);
        imageView = (ImageView) findViewById(R.id.imageView);
        btnCamera.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap photo = (Bitmap) extras.get("data");
            imageView.setImageBitmap(photo);
            String convertedIMG = convertImage(photo);
            sendToRemote(convertedIMG);
        } else {
            Toast.makeText(MainActivity.this, "Could Not Capture Image, Please Try Again.", Toast.LENGTH_LONG).show();
        }
    }

    private String sendToRemote(String sendImage) {
        String url = "localhost:3000/medicalImage";
        try {

            RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
            StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.d("Response: >", response); /// put this on the UI wil contain the percentage of accuracy if positive

                        }
                    },

                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            //  imageView.setVisibility(View.GONE);
                            Log.d("network", "=========>", error);
                            error.printStackTrace();
                            Toast.makeText(MainActivity.this, "Error Submitting Image", Toast.LENGTH_LONG).show();
                        }
                    });
            // Add the request to the RequestQueue.
            queue.add(stringRequest);
        } catch (Exception error) {
            error.printStackTrace();
        }
        return "";
    }

    private String convertImage(Bitmap photo) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        photo.compress(Bitmap.CompressFormat.JPEG, 100, out);
        byte[] b = out.toByteArray();
        return Base64.encodeToString(b, Base64.DEFAULT);
    }
}

Код, который мы использовали ниже ------------------------------------------- ------------

 private void sendToRemote(final String sendImage) {
     String url = "url";
     try {

         JSONObject jsonBody = new JSONObject();
         jsonBody.put("Image", sendImage);
         requestBody = jsonBody.toString();
         StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                 new Response.Listener<String>() {

                     @Override
                     public void onResponse(String response) {
                         // Log.d("Response: >", response);
                         Toast.makeText(MainActivity.this, "Prediction "
                                 + response, Toast.LENGTH_LONG).show(); // returns percent of assumption
                     }
                 },
                 new Response.ErrorListener() {
                     @Override
                     public void onErrorResponse(VolleyError error) {
                         //Log.d("network", "=========>", error);
                         error.printStackTrace();
                         Toast.makeText(MainActivity.this, "Error Submitting Image", Toast.LENGTH_LONG).show();
                     }

                 }) {

             @Override
             public String getBodyContentType() {
                 return String.format("application/json; charset=utf-8");
             }

             @Override
             public byte[] getBody() throws AuthFailureError {
                 try {

                     return requestBody == null ? null : requestBody.getBytes("utf-8");
                 } catch (UnsupportedEncodingException uee) {

                     return null;
                 }
             }
         };
         RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
         queue.add(stringRequest);
     } catch (Exception error) {
         Toast.makeText(MainActivity.this, "Unexpected Network Error", Toast.LENGTH_LONG).show();
         error.printStackTrace();
     }
 }

1 Ответ

0 голосов
/ 29 апреля 2018

Чтобы добавить параметр, вы должны переопределить getParams (), например:

 StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("Response: >", response); /// put this on the UI wil contain the percentage of accuracy if positive

                    }
                },

                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        //  imageView.setVisibility(View.GONE);
                        Log.d("network", "=========>", error);
                        error.printStackTrace();
                        Toast.makeText(MainActivity.this, "Error Submitting Image", Toast.LENGTH_LONG).show();
                    }
                }) {
                    @Override
                    protected Map<String, String> getParams() {
                        Map<String, String>  params = new HashMap<String, String>();
                        params.put("your-key", your-data);
                        return params;
                    }
    };
...