使用方形改造库来发出http请求

时间:2014-08-02 20:50:31

标签: android httprequest gson retrofit

我正在使用loopj async http library to make http requests,但在进行了研究about android networking library后,我发现 retrofit 比排球更好,紧固和最可靠的网络库在那里。

我计划将我的代码更改为适合使用retrofit ..

以前,我使用此方法制作HTTP requests

AsyncHttpClient AHC = new AsyncHttpClient();
        RequestParams param = new RequestParams();
        param.put("arg1", arg1);
        param.put("arg2", arg2);
        AHC.post("http://xxxxx.xxx.xxxx.xxxx", param,
                new AsyncHttpResponseHandler() {

                    @Override
                    public void onSuccess(String content) {
                        // TODO Auto-generated method stub

我得到的内容是json type.

我读到改装默认使用gson ..我认为这真的更快。

以前我曾经以这种方式填充我的内部数据库:

JSONArray jArray = new JSONArray(content);
for (int i = 0; i < jArray.length(); i++) {
    JSONObject json = jArray.getJSONObject(i);
    TD.CreatePostsTable(
            json.getString("id")}

这些方法将如何改进?

非常感谢你们!

2 个答案:

答案 0 :(得分:3)

你的帖子方法:

@POST("/users/login")
    YOUR_RETURN_TYPE loginUser(@Field("arg1") String arg1,
                   @Field("arg2") String arg1);

Retrofit配置:

new RestAdapter.Builder()
                .setEndpoint("http://your_url")
                .setLogLevel(RestAdapter.LogLevel.FULL).build();

我建议使用这种方法与Retrofit一起使用,使用Singleton:

private Map<String, Object> restInstances = new HashMap<String, Object>();
public <T> T getRescClient(Class<T> clazz) {
    T client = null;

    if ((client = (T) restInstances.get(clazz.getCanonicalName())) != null) {
        return client;
    }

    client = restAdapter.create(clazz);
    restInstances.put(clazz.getCanonicalName(), client);
    return client;
}

然后打电话给:

 restApiProvider.getRestClient(UserService.class).your_method()

希望它有所帮助!

答案 1 :(得分:0)

请看这个实现:https://github.com/UweTrottmann/tmdb-java

Tmdb类构建不同的服务。例如,MovieServices有:

@GET("/movie/{id}")
Movie summary(
        @Path("id") int tmdbId
);

此方法将调用/ movie / {id}方法返回给返回JSON的REST服务器。该方法将返回一个Movie对象,其中的属性与JSON键同名。

public class Movie extends MediaBase implements TraktEntity {
private static final long serialVersionUID = -1543214252495012419L;

@SerializedName("tmdb_id") public int tmdbId;
public Integer plays;
@SerializedName("in_collection") public Boolean inCollection;
public Date released;
public String trailer;
public Integer runtime;
public String tagline;
public String overview;
public String certification;
public Boolean watched;

}