【问题标题】:Android: posting to Laravel with Volley doesn't workAndroid:使用 Volley 发布到 Laravel 不起作用
【发布时间】:2014-01-06 18:51:51
【问题描述】:

我正在使用 google Volley library 来处理我的应用程序网络。

我的后端是一个带有Laravel 4 的apache 服务器。当我尝试使用 JsonObjectRequest 发出 POST 请求时,我得到一个空的 $_POST 数组。

我能够使用此处描述的方法解决它:Volley JsonObjectRequest Post request not working

但这似乎是对象不是很复杂的简单情况的解决方案。 另外,我想使用 Gson 和自定义 GsonRequest,但它会产生同样的问题。

对我来说似乎很奇怪 php 尤其是 Laravel 不知道如何处理 JSON 请求,因为这是一个 REST 框架,我错过了什么吗?有没有更好的办法解决?

【问题讨论】:

    标签: php android laravel android-volley


    【解决方案1】:

    好吧,显然解决方案非常简单,只需要深入研究文档即可:)

    http://laravel.com/docs/requests

    特别是这个注意:

    某些 JavaScript 库(例如 Backbone)可能会将输入作为 JSON 发送到应用程序。您可以像往常一样通过 Input::get 访问这些数据。

    【讨论】:

      【解决方案2】:

      我就是这样解决的。下面是我创建的扩展凌空类的自定义类。参数以 Map 形式提供

      public class CustomJsonRequest extends Request {
      
      Map<String, String> params;       
      private Response.Listener listener; 
      
      public CustomJsonRequest(int requestMethod, String url, Map<String, String> params,
                            Response.Listener responseListener, Response.ErrorListener errorListener) {
      
          super(requestMethod, url, errorListener);
          this.params = params;
          this.listener = responseListener;
      }
      
      @Override
      protected void deliverResponse(Object response) {
          listener.onResponse(response); 
      
      }
      
      @Override
      public Map<String, String> getParams() throws AuthFailureError {
               return params;
      }
      
      @Override
      protected Response parseNetworkResponse(NetworkResponse response) {
          try {
              String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
              return Response.success(new JSONObject(jsonString),
              HttpHeaderParser.parseCacheHeaders(response));
          } catch (UnsupportedEncodingException e) {
              return Response.error(new ParseError(e));
          } catch (JSONException je) {
              return Response.error(new ParseError(je));
          }
      }
      
      }
      

      你可以提供pamas作为

      Map<String, String> params = new HashMap<String, String>();
        params.put("email", email.getText().toString());
        params.put("password", password.getText().toString());
      

      使用它,您将能够在您的 api 中使用 GET 或 POST 动词。

      【讨论】:

      • 这仅适用于对象为平面的简单情况,但如果您要发送复杂的数据结构怎么办?
      • 我遇到过这种情况,但我认为可以通过使用 $_POST['userinfo']['email'] 来解决。
      【解决方案3】:

      使用这个$_REQUEST而不是$_POST:D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-27
        • 2018-02-13
        • 2014-02-28
        • 2020-07-15
        相关资源
        最近更新 更多