【问题标题】:Can I use loopj async HTTP client to send data to a PHP page?我可以使用 loopj 异步 HTTP 客户端将数据发送到 PHP 页面吗?
【发布时间】:2016-02-19 20:36:08
【问题描述】:

我已成功安装 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) {

            }
        });

错误:

AsyncHttpClient 中使用的同步 ResponseHandler。您应该在 looper 线程中创建响应处理程序,或者改用 SyncHttpClient。

这是因为 UI 线程,但使用这个客户端的全部意义在于它可以绕过 UI 线程异常并执行 http 请求?

没有logcat。

任何有关如何解决此问题的建议将不胜感激。

【问题讨论】:

  • 错误信息的哪一部分不清楚?它说要使用弯针或SyncHttpClient
  • logcat 中没有要报告的内容 没有失败 没有异常 没有错误 没有
  • 我在 onSuccess 方法调用周围放了一个 log.d,但没有打印任何内容,只是在 android 弹出窗口上打印状态代码 200

标签: java php android android-handler android-async-http


【解决方案1】:

您可以使用以下解决方法调用PostData()

new Handler(Looper.getMainLooper()).post(new Runnable(
   {
    @Override
    public void run()
    {
        postData();
    }
})) ;

这正是一个 UI 线程问题。

【讨论】:

  • 我完全误解了这个客户端我可以使用这个客户端将数据发送到一个php网页吗?
  • 可以,这是一个广泛使用的网络库
  • 好的。那么你有什么想法为什么我不能让我的数据显示在 php 端?
  • 我不知道现在还有什么可以尝试的,因为我尝试了内置的 http 客户端并且我尝试了第三方,有些东西告诉我可能是某些东西阻塞了套接字,或者我在生产环境中尝试过它也
  • 可能是你的windows/linux防火墙
【解决方案2】:

我在几个项目中使用了 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);
        }
    });

【讨论】:

  • 就在android的mainActivity类中这个方法
  • 也许您正在 mainActivity 的正在运行的线程中运行此方法?
  • 是的,但请求仍然应该被执行,对吧?
  • 然后在你的 postData() 方法中使用SyncHttpClient client = new AsyncHttpClient();,loopJ AsyncHttpClient 判断正在运行的线程。
  • 我需要将数据读入阅读器还是只使用 php superglobals 显示?还是我需要使用 JSON
【解决方案3】:

php 代码:

ob_start();
error_reporting(0);

var_dump($_REQUEST);
var_dump(headers_list());

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 2013-05-14
    • 1970-01-01
    • 2011-07-31
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多