-
Notifications
You must be signed in to change notification settings - Fork 36
RetroFacebook Spec
Andrew Chen edited this page Jun 15, 2015
·
18 revisions
ref. https://developers.facebook.com/docs/graph-api/reference/v2.3/post
Facebook Android SDK v3
/* make the API call */
new Request(
session,
"/{post-id}",
null,
HttpMethod.GET,
new Request.Callback() {
public void onCompleted(Response response) {
/* handle the result */
}
}
).executeAsync();
Facebook Android SDK v4
GraphRequest.executeBatchAsync(
new GraphRequestBatch(
new GraphRequest.newGraphPathRequest(
accessToken,
"/{post-id}",
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
/* handle the result */
}
}
)
)
);
ref.
import retrofacebook.v4.RetroFacebook;
@RetroFacebook
abstract class Facebook {
@RetroFacebook.GET("/{postId}")
Observable<Post> getPost(@RetroFacebook.Path String postId);
public static Facebook create() {
return new RetroFacebook_Facebook();
}
}
public class RetroFacebook_Facebook extends Facebook {
@Override
public Observable<Post> getPost(String postId) {
return Observable.create(new OnSubscribeGraphResponse(
new GraphRequest.newGraphPathRequest(
AccessToken.getCurrentAccessToken(),
"/" + postId, /* GraphRequest.Callback */ null // setCallback
)
)
).map(response -> LoganSquare.parse(response.getJSONObject().toString(), AutoFacebook_Post.class));
}
public class OnSubscribeGraphResponse implements Observable.OnSubscribe<GraphResponse> {
public GraphRequest request;
public OnSubscribeGraphResponse(GraphRequest request) {
this.request = request;
}
@Override
public void call(final Subscriber<? super GraphResponse> sub) {
if (request != null) {
request.setCallback(new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
try {
FacebookRequestError requestError = response.getError();
FacebookException exception = (requestError == null) ? null : requestError.getException();
/* move into Observable.map()
if (response.getJSONObject() == null && exception == null) {
exception = new FacebookException("GraphObjectPagingLoader received neither a result nor an error.");
}
*/
if (exception != null) {
sub.onError(exception);
} else {
sub.onNext(response);
request = response.getRequestForPagedResults(GraphResponse.PagingDirection.NEXT);
if (request != null) {
call(sub);
} else {
sub.onCompleted();
}
}
} catch (Throwable e) {
sub.onError(e);
}
}
});
GraphRequest.executeBatchAsync(new GraphRequestBatch(request));
} else {
sub.onCompleted();
}
}
}
}
@AutoJson to logansquare.@JsonObject.
@AutoJson.Field to logansquare.@JsonField.
@AutoJson
abstract class Post {
@Nullable
public abstract String id();
@Nullable
@AutoJson.Field(name = "is_hidden")
public abstract Boolean isHidden();
@AutoJson.Builder
public abstract static class Builder {
public abstract Builder id(String id);
public abstract Builder isHidden(Boolean isHidden);
public abstract Post build();
}
public static Builder builder() {
return new AutoJson_Post.Builder();
}
}
LoganSquare:
@JsonObject
public class AutoFacebook_Post {
@JsonField
String id;
@JsonField(name = "is_hidden")
Boolean isHidden;
// ...
}
Facebook Android SDK v4:
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link");
request.setParameters(parameters);
request.executeAsync();
PostTypeConverter:
public static class PostConverter implements TypeConverter<Post> {
@Override
public Post parse(JsonParser jsonParser) throws IOException {
return AutoJson_Post$$JsonObjectMapper._parse(jsonParser);
}
@Override
public void serialize(Post object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {
return AutoJson_Person$$JsonObjectMapper._serialize(object, fieldName, writeFieldNameForObject, jsonGenerator);
}
}
- Robolectric
- mockito
- truth, assertj