I'm currently researching ServiceStack as a replacement to my own services for handling REST between Android and Windows.
I've got the client (Android) working using loopj's AsyncHttpClient. But I was looking for a more native library. Initially I was using Jsonserviceclient but decided on the AndroidServiceClient. The problem I had was setting up basic authentication on the connection. After a few hours of reading JsonServiceClient.java (which AndroidServiceClient extends). It transpired I have to implement my own request ConnectionFilter and set uo the request headers in the void exec(HttpURLConnection urlConnection) method.
After creating code I got the error "cannot set request property after connection is made".
Seems I needed to tweak the code to suppress this error.
CustomRequestFilter...
package com.jjoplc.pod.Views;
import android.util.Base64;
import net.servicestack.client.ConnectionFilter;
import java.net.HttpURLConnection;
/**
* Created by norm on 01/07/2015.
*/
public class CustomRequestFilter implements ConnectionFilter {
private String password = "";
private String username = "";
static boolean done = false;
public void exec(HttpURLConnection urlConnection) {
if (done) {
done = false;
return;
};
done = true;
String credentials = username + ":" + password;
final String basicAuth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
urlConnection.setRequestProperty("Authorization", basicAuth);
}
public void setUsername(String userName) {
this.username = userName;
}
public void setPassword(String passWord) {
this.password = passWord;
}
}
Set up.
_androidClient = new AndroidServiceClient("http://myservice:8088");
_requestFilter = new CustomRequestFilter();
_requestFilter.setUsername("User");
_requestFilter.setPassword("Password");
_androidClient.RequestFilter = _requestFilter;
And Test.
androidClient.getAsync(new dto.Hello().setName("Normski"), new AsyncResult<dto.HelloResponse>() {
@Override
public void success(dto.HelloResponse r) {
view.setText(r.getResult());
}
@Override
public void error(Exception ex) {
view.setText(ex.toString());
}
});
No comments:
Post a Comment