2016-10-11 2 views
0

Я пытаюсь запустить это приложение, но когда я пытаюсь войти в систему, я вижу эту ошибку в «logcat». Сообщение «Success Login» указывает, что оно было зарегистрировано и есть соединение с базой данных, но я не знаю, где будет ждать объект и где будет получать строку.Ожидаемый BEGIN_OBJECT, но был STRING в строке 1 столбец 1 LoginActivity

10-11 14:54:10.481 2532-7430/com.alvardev.demos.limacultural D/com.alvardev.demos.limacultural.http.RestJsonService: Respuesta data : stdClass Object ([login] => stdClass Object
(
[email] => [email protected]
[password] => 123
))
SELECT id, name, email, urlImg FROM usuario WHERE email='[email protected]' AND password='123'

Notice: Undefined index: password in C:\xampp\htdocs\culturapp\login.php on line 40

Notice: Undefined index: password in C:\xampp\htdocs\culturapp\login.php on line 40
{"success":true,"message":"Success Login","user":{"id":"26","name":"kat","email":"[email protected]","urlImg":""}}

10-11 14:54:10.541 2532-2532/com.alvardev.demos.limacultural E/LoginActivity: error: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1

10-11 14:54:10.551 2532-2532/com.alvardev.demos.limacultural E/HttpClient: NO SERVICES

// LoginActivity

btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String user = eteUser.getText().toString(); 
      String pass = etePassword.getText().toString(); 

      if (validateLogin(user, pass)) { 
       RequestLogin login = new RequestLogin(new LoginEntity(user,pass)); 
       layLoading.setVisibility(View.VISIBLE); 
       Gson gson = new Gson(); 
       connectPost(DOMAIN + "login.php", gson.toJson(login), Const.LOGIN); 
      } 

     } 
    }); 

// BaseActionBarActivity

общественного недействительными connectPost (String URL, String JSON, внутр действие) {

Intent intentService = new Intent(this, RestJsonService.class); 


    Bundle parameters = new Bundle(); 
    parameters.putString(RestJsonService.LLAVE_CONTENIDO_PETICION,json); 
    parameters.putParcelable(RestJsonService.LLAVE_RECIBIDOR,resultReceiver); 
    parameters.putInt(RestJsonService.LLAVE_METODO_PETICION, HttpMethod.POST.getValue()); 
    parameters.putString(RestJsonService.LLAVE_URL, url); 
    parameters.putInt(RestJsonService.LLAVE_TIPO_ACCION, action); 

    intentService.putExtras(parameters); 
    startService(intentService); 
} 

// RestJsonService

p rotected недействительным onHandleIntent (Intent намерение) {

Log.d(TAG, "Iniciando servicio"); 
    String url = null; 
    String datos = null; 
    int metodo = 0; 
    int tipoAccion = 0; 
    HttpResult resultado = null; 

    Bundle parametros = intent.getExtras(); 

    url = parametros.getString(LLAVE_URL); 
    datos = parametros.getString(LLAVE_CONTENIDO_PETICION); 
    metodo = parametros.getInt(LLAVE_METODO_PETICION); 
    tipoAccion = parametros.getInt(LLAVE_TIPO_ACCION); 

    Log.d(TAG, "Llamada a la url " + url); 
    Log.d(TAG, "Llamada con datos " + datos); 
    Log.d(TAG, "Llamada metodo " + metodo); 
    Log.d(TAG, "Llamada tipoaccion " + tipoAccion); 

    ResultReceiver recibidor = parametros.getParcelable(LLAVE_RECIBIDOR); 

    HttpMethod metodoEnum = HttpMethod.forValue(metodo); 
    Log.d(TAG, "Llamada " + metodoEnum.toString()); 
    switch (metodoEnum) { 
     case POST: 
      Log.d(TAG, "antes por el post"); 

      resultado = postJson(datos, url); 


      break; 
     case GET: 
      resultado = getJson(url); 
      Log.d(TAG, "paso por el get"); 

      break; 
     default: 
      break; 
    } 
    Log.d(TAG, "Respuesta codigo : " + resultado.getStatusCode()); 

    Log.d(TAG, "Respuesta data : " + resultado.getData()); 

    Bundle datosResultado = new Bundle(); 
    datosResultado 
      .putString(LLAVE_CONTENIDO_RESPUESTA, resultado.getData()); 
    datosResultado.putInt(LLAVE_TIPO_ACCION, tipoAccion); 

    recibidor.send(resultado.getStatusCode(), datosResultado); 
    //recibidor = null; 
} 

частный HttpResult postJson (String bodyRequest, String URL) {

HttpPost httpPost = new HttpPost(url); 
    HttpParams httpParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParams, 30000); 
    HttpConnectionParams.setSoTimeout(httpParams, 30000); 
    HttpClient httpClient = new DefaultHttpClient(httpParams); 

    String data = null; 
    int status = 0; 

    StringEntity se; 
    try { 
     se = new StringEntity(bodyRequest, "UTF8"); 
     se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "text/json")); 
     Log.d(TAG, "text/json"); 
     httpPost.setEntity(se); 



     HttpResponse response = httpClient.execute(httpPost); 
     status = response.getStatusLine().getStatusCode(); 

     HttpEntity entity = response.getEntity(); 
     String respuesta = EntityUtils.toString(entity); 
     data = respuesta; 

    } catch (ClientProtocolException e) { 
     status = HttpCode.ERROR.getCode(); 
     Log.e(TAG, "Error protocolo"); 
     Log.e(TAG, getErrorMessage(e, "Error al realizar la peticion")); 
    } catch (IOException e) { 
     Log.e(TAG, "Error timeout"); 
     Log.e(TAG, getErrorMessage(e, "Timeout sucedio")); 
     status = HttpCode.TIMEOUT.getCode(); 
    } catch (Exception e) { 
     Log.e(TAG, "Error general"); 

     Log.e(TAG, 
       getErrorMessage(e, 
         "Error generico sucedio al realizar la petici�n")); 
     status = HttpCode.ERROR.getCode(); 
    } 

    return new HttpResult(data, status); 
} 

ответ

1

Здесь у вас есть образец плохой реализации на стороне сервера API. На самом деле, если api отвечает json, тогда обязательно ответьте json. Что касается меня, то плохая практика - отправить одну строку времени, а другую - сериализованную json.

хорошая практика, как для меня это все реагирует, как:

{"success":true, "data": "some data object optional"} 
{"success":false, "error":{"errorCode":123, "errorMessage":"some error text"}, data:"some additional data object optional"} 

, чтобы убедиться, что вы получили правильную реагировать hmac запрос на подпись может быть реализован - так вы будете проверять и десериализации только если hmac знак правильно, чтобы быть уверенный ответ в порядке, и вы получили свой json. Coz без проверки вы не знаете, что у вас есть, вы можете получить текст ошибки как строку с сервера, и вы попытаетесь десериализовать его с помощью Gson.

в любом случае вы можете поймать все с try/catch, но выше, надлежащим образом описаны)

0

ошибка происходит от Gson, когда вы пытаетесь разобрать строку ответа к JSON. Это типичная ошибка, когда предоставленная строка не является допустимым JSON, а простой строкой. Ошибка происходит из этой части, вероятно:

Gson gson = new Gson(); 
connectPost(DOMAIN + "login.php", gson.toJson(login), Const.LOGIN); 

Вы пытаетесь преобразовать JSON в login объект:

  RequestLogin login = new RequestLogin(new LoginEntity(user,pass)); 

И Строковое представление этого объекта не JSON. Вы не используете код класса RequestLogin, но попробуйте изменить свой код, чтобы предоставить действительный JSON для Gson. Теперь вы предоставляете вывод toString() в классе RequestLogin, который не является допустимым JSON.

Вы можете делиться содержанием gson.toJson(login)?

Смежные вопросы