2016-07-08 2 views
0

Я делаю несколько тестов, используя данные, чтобы зарегистрировать нового пользователя в моей БД, отправив json по почте. Сервер возвращает статическую строку только для тестирования. Я получаю правильный ответ с помощью консоли и CURLCan't Post JSON для сервера Express js с использованием OkHttp3 в Android

curl --data '' http://127.0.0.1:3000/api/user/register 

<!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html> 

и даже с расширением Почтальоной отправкой запроса на запись в тот же URL я получаю правильный ответ, а также. Но приведенный ниже код не получает никакого ответа от сервера. Чего не хватает?. Это не вызывает ошибок, а json корректен после проверки отладчика (это не имеет значения, но на всякий случай кто-то хочет знать), просто регулярная строка. Отладчик сбой в этой строке

Response response = client.newCall(request).execute(); 



private void createUser(String name, String email, String password){ 

     //create JSON 

     final String userJson = formatUserAsJSON(name,email,password); 

     //send JSON 

     new AsyncTask<Void,Void,String>(){ 

      @Override 
      protected String doInBackground(Void... voids) { 

       try { 
        //1.create client Object 
       OkHttpClient client = new OkHttpClient(); 
       //2.Define request being sent to server 
       RequestBody postData=new FormBody.Builder() 
         .add("json",userJson) 
         .build(); 

       Request request=new Request.Builder() 
         .url("http://127.0.0.1:3000/api/user/register") 
         .post(postData) 
         .build(); 

       //3.Transport the request and wait for response to process next 

        Response response = client.newCall(request).execute(); 
        String result = response.body().string(); 
        return result; 
       } catch (Exception e) { 
        Log.d("error_connection","couldn't connect to the API"); 
        return null; 
       } 


      } 

     }.execute(); 



    } 

Я был бы признателен за некоторые отзывы по этой проблеме. Большое спасибо

РЕДАКТИРОВАТЬ: Сервер не дает ответа, так как приложение андроида не достигает его. Я вижу на консоли ubuntu, и nodejs не печатает никакого сообщения ни о каком запросе .....

EDIT 2: В манифесте Android у меня есть разрешение пользователя на доступ к сети, так что это не так ... ..

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Попробуйте зарегистрировать ответ, который вы получаете, напечатайте здесь, и мы можем взять его оттуда. – Vucko

+0

read my Edit .... – Juan

ответ

0

Я решил проблему поставив сетевой IP (он также работает, если вы поставите Public Inte rnet IP, я это пробовал), причина 127.0.0.1 сервера ссылалась на эмулятор Genymotion, глупо меня: S. Но это был ответ. Спасибо всем за поддержку.

0

вы отправляете JSON внутри FormBody

попробовать это:

RequestBody postData = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), userJson); 
+0

Я пробовал это без везения ... На консоли сервера все еще нет запросов ... Я запускаю отладчик, а содержимое запроса - это 'Request {method = POST, url = http: //127.0.0.1: 3000/api/user/register, tag = null} ' . Формат json также верен – Juan

+0

Я думал, что проблема может заключаться в использовании 127.0.0.1. Это должно быть публичное право IP? ..... потому что я думаю, что 127.0.0.1 относится к самому эмулятору (в данном случае - Genymotion). Я попробую это и отправлю ответ, если это правильно ..... – Juan