Я успешно установил асинхронный http-клиент loopj, и у меня возникла эта проблема при выполнении этого кода:
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) {
}
});
Ошибка:
Синхронный ResponseHandler используется в AsyncHttpClient. Вы должны создать свой обработчик ответа в зацикленном потоке или использовать вместо него SyncHttpClient.
Это из-за потока пользовательского интерфейса, но весь смысл использования этого клиента состоит в том, что он может обойти исключение потока пользовательского интерфейса и выполнить запрос http?
Логкатов нет.
Любые советы о том, как решить эту проблему, будут высоко оценены.
Вы можете позвонить PostData()
со следующим обходным путем
new Handler(Looper.getMainLooper()).post(new Runnable(
{
@Override
public void run()
{
postData();
}
})) ;
Это точно проблема потока пользовательского интерфейса.
Я использовал loopJ AsyncHttpClient для нескольких проектов. Могу ли я узнать весь код / класс, который вы реализуете loopJ?
Вы должны реализовать свой клиент, как это, если вы ожидаете String от вашего 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());