Sto creando un'app per Android utilizzando Retrofit 2. I miei REST Api sono tutti scritti in Liferay. Ora in Liferay, quello che ho visto è che per accedere ai servizi web dobbiamo prima autenticarci. Così ho autenticato come questoAccesso tramite servizio web Rest da Android utilizzando il retrofit non funzionante
http://test:[email protected]:8080/liferay-portlet/api/secure/jsonws/
Liferay ha il proprio metodo di autenticazione utente, che abbiamo overridden.I verificato la chiamata di servizio Web da Postman relativo funzionamento benissimo.
URL:http://test:[email protected]:8080/liferay-portlet/api/secure/jsonws/customuserauthentication/authenticate-by-user-name
valori di modulo codifica
companyId:10154
screenName:xyz
password:xyz
active:true
Se metto questo nel postino, recupera correttamente la risposta JSON.
Ora quando chiamo lo stesso dal mio codice Android ottengo una risposta "Non autorizzato".
Il mio servizio Retrofit
public interface LoginApi {
@FormUrlEncoded
@POST("/liferay-portlet/api/secure/jsonws/customuserauthentication/authenticate-by-user-name")
Call<User> login(@Field("companyId")long companyId,@Field("screenName")String screenName,@Field("password")String password,@Field("active")boolean active);
}
mio RestApiManager Classe (Questa classe viene utilizzata per chiamare l'interfaccia del servizio e creare il costruttore retrofit)
public class RestApiManager {
private LoginApi loginApi;
public LoginApi login() {
if (loginApi==null) {
GsonBuilder gson=new GsonBuilder();
gson.registerTypeAdapter(String.class, new StringDeserializer());
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://test:[email protected]:8080")
.addConverterFactory(GsonConverterFactory.create())
.build();
loginApi=retrofit.create(LoginApi.class);
}
return loginApi;
}
Una chiamata al RestApiManager
Call<User> callUser=restApiManager.login().login(loginData.getCompanyId(),loginData.getScreenName(),loginData.getPassword(),loginData.isActive());
callUser.enqueue(new Callback<User>() {
@Override
public void onResponse(Response<User> response, Retrofit retrofit) {
Log.d("Login","Login Response:"+response.body());
}
@Override
public void onFailure(Throwable t) {
Log.d("Login","Login Response:"+t.getMessage());
}
});
qual è la risposta? Quale callback è chiamato? – Blackbelt
si dovrebbe mettere un Loggin –