我已经成功安装了loopj异步http客户端,但在执行此代码时遇到了此问题:
protected void PostData(Integer Question_ID,Integer ResponseChosen_ID) throws IOException {
AsyncHttpClient client = new AsyncHttpClient();
final RequestParams params1 = new RequestParams();
params1.add("Question_ID",Question_ID.toString());
client.post("http://10.0.2.2:443/SwlLogin.php", params1, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
System.out.print(params1);
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
错误:
这是因为 UI 线程,AsyncHttpClient 中使用的同步响应处理程序。您应该在 looper 线程中创建响应处理程序,或者改用 SyncHttpClient。
但使用此客户端的全部意义在于它可以绕过 UI 线程异常并执行 http 请求?
没有日志猫。
有关如何解决此问题的任何建议将不胜感激。
您可以使用
以下解决方法调用PostData()
new Handler(Looper.getMainLooper()).post(new Runnable(
{
@Override
public void run()
{
postData();
}
})) ;
这正是 UI 线程问题。
我在几个项目中使用了loopJ AsyncHttpClient,我能知道你正在实现loopJ的整个代码/类吗?
如果你期望从你的 php 中获得字符串,你应该像这样实现你的客户端
client.post("http://10.0.2.2:443/SwlLogin.php", params1, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Log.d("RESPONSE", responseString);
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Log.d("RESPONSE", responseString);
}
});
php 代码:
ob_start();
error_reporting(0);
var_dump($_REQUEST);
var_dump(headers_list());