【发布时间】:2016-06-10 16:08:03
【问题描述】:
我正在寻找一种使用 OKHTTP 实现 JSON-POST 请求的解决方案。我有一个 HTTP-Client.java 文件,它处理所有方法(POST、GET、PUT、DELETE),并且在 RegisterActivity 中我想将用户数据(来自输入字段)以 JSON 格式发布到服务器。
这是我的 HTTP-Client.java
public class HttpClient{
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
public static OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.build();
public static Call post(String url, String json, Callback callback) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body.create(JSON, json))
.build();
Call call = client.newCall(request);
call.enqueue(callback);
return call;
}
}
...这是 RegisterActivity
中的 onClick-PartbtnRegRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO
String registerData = "{\"email\":\"" + etRegisterEmail.getText().toString() + "\",\"password\":\"" + etRegisterPasswort.getText().toString() + "\"}";
try {
HttpClient.post(ABSOLUTE_URL, registerData, new Callback(){
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String resp = response.body().string();
if (resp != null) {
Log.d("Statuscode", String.valueOf(response.code()));
Log.d("Body", response.body().string());
}
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
每次我启动应用程序时,当我单击由 FATAL EXPECTION 'android.os.NetworkOnMainThreadException' 引起的注册按钮时,它都会崩溃
我已经阅读了有关 AsyncTask 的一些内容,但我不知道具体该怎么做。
【问题讨论】:
-
首先,看看 Retrofit with okhttp 和 GSON。对于高级版本,您可以包含 Otto 和 Dagger2 以将核心业务与前端完全分离。
标签: android json http post okhttp3