Почему я получаю исключение java .io.FileNotFoundException: http://10.0.2.2: 4000 / products / add при попытке отправить http-запрос? - PullRequest
3 голосов
/ 18 июня 2020

Я пытаюсь отправить json на сервер, который я написал в NodeJS, соединение с сервером установлено. По какой-то причине я получаю FileNotFoundException, журнал:

java.io.FileNotFoundException: http://10.0.2.2:4000/products/add at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255) at com.example.myfstrdbcontroller.SendProductJsonTask.doInBackground(SendProductJsonTask.java:39) at com.example.myfstrdbcontroller.SendProductJsonTask.doInBackground(SendProductJsonTask.java:21)

мой код:

public class SendProductJsonTask extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground(String... strings) {
    String data = "";

    HttpURLConnection httpURLConnection = null;
    try {
        httpURLConnection = (HttpURLConnection) new URL(strings[0]).openConnection();
        httpURLConnection.setRequestMethod("POST");

        httpURLConnection.setDoOutput(true);

        DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
        wr.writeBytes("PostData="+strings[1]);
        wr.flush();
        wr.close();

        InputStream in = httpURLConnection.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(in);

        int inputStreamData = inputStreamReader.read();

        while (inputStreamData != -1) {

            char current = (char) inputStreamData;

            inputStreamData = inputStreamReader.read();

            data += current;

        }

    } catch (Exception e) {
        Log.d("ccb", "doInBackground16: "+e.getCause());
        Log.d("ccb", "doInBackground17: "+e.getMessage());
        e.printStackTrace();
    } finally {
        if (httpURLConnection != null) {
            httpURLConnection.disconnect();
        }
    }
    return data;
}

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    Log.d("ccb", "onPostExecute: "+s);
}

}

код, который я вызываю в HTTP-запросе:

try {
                productJson(nameOfProduct, serialOfProduct, priceOfProduct, getGenderRB(), uriList, getColorsCB(), getSizeCB(), new JSONMadeListener() {
                    @Override
                    public void onJSONMade(JSONObject object) {
                        try {
                            SSLContext.getInstance("TLSv1.2");
                        } catch (NoSuchAlgorithmException e) {
                            e.printStackTrace();
                        }
                        try {
                            ProviderInstaller.installIfNeeded(getApplicationContext());
                        } catch (GooglePlayServicesRepairableException e) {
                            e.printStackTrace();
                        } catch (GooglePlayServicesNotAvailableException e) {
                            e.printStackTrace();
                        }
                        new SendProductJsonTask().execute("http://10.0.2.2:4000/products/add",object.toString());
                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }

Ответы [ 3 ]

0 голосов
/ 27 июня 2020

Итак, в некоторых местах вы получаете одинарные кавычки и некоторые двойные кавычки на стороне сервера. Надеюсь, что-то подобное может помочь -

object.toString.replaceAll("\\\"", "\"").replaceAll("\"", "\\\"")
0 голосов
/ 28 июня 2020

Если сервер возвращает код ошибки, метод getInputStream вернет ошибку. Вы должны проверить, какой код ответа вы получите с помощью httpURLConnection.getResponseCode(), и продолжить, основываясь на ответе. В случае ошибки вы можете использовать getErrorStream(), чтобы увидеть ошибку.

0 голосов
/ 21 июня 2020

В вашем случае

httpURLConnection.getInputStream ();

выбрасывает FileNotFoundException, что означает некоторую проблему с вашим сервером.

Попробуйте проверить, действительно ли работают почтовые запросы, используя https://www.codepunker.com/tools/http-requests.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...