Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从android发布到Ruby on Rails应用程序_Android_Ruby On Rails_Http_Post - Fatal编程技术网

从android发布到Ruby on Rails应用程序

从android发布到Ruby on Rails应用程序,android,ruby-on-rails,http,post,Android,Ruby On Rails,Http,Post,因此,我试图从我正在编写的Android应用程序发布到rails应用程序。我可以在rails应用程序中发布成功的消息。我还能够使用名为SimpleRESTClient的chrome插件成功发布 当我尝试从Android应用程序发帖时,它会点击rails应用程序,但会创建一个空帖子。rails没有接收到任何输入数据 我了解到,第三方应用程序只能从Rails应用程序获取,这取决于身份验证,因此为了确保这不是我遇到的问题,我将其添加到我的Rails配置中 # de-activate tolken a

因此,我试图从我正在编写的Android应用程序发布到rails应用程序。我可以在rails应用程序中发布成功的消息。我还能够使用名为SimpleRESTClient的chrome插件成功发布

当我尝试从Android应用程序发帖时,它会点击rails应用程序,但会创建一个空帖子。rails没有接收到任何输入数据

我了解到,第三方应用程序只能从Rails应用程序获取,这取决于身份验证,因此为了确保这不是我遇到的问题,我将其添加到我的Rails配置中

# de-activate tolken auth
config.action_controller.allow_forgery_protection = false
在这一点上,我不确定我的问题在哪里,是我的Rails后端还是我的Android客户端

好的,我尝试访问的控制器中的Rails post方法就在这里

# POST /orders
  # POST /orders.json
  def create
    @order = Order.new(params[:order])

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render json: @order, status: :created, location: @order }
      else
        format.html { render action: "new" }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end
下面是发送Post请求的Android java代码。 这是传递我试图发布的用户输入数据的方法

private void postInformationtoAPI() {

                showToast("POSTING ORDER");
                List<NameValuePair> apiParams = new ArrayList<NameValuePair>();
                apiParams.add(new BasicNameValuePair("drinks_id", GlobalDrinkSelected));
                apiParams.add(new BasicNameValuePair("name", GlobalEditTextInputName));
                apiParams.add(new BasicNameValuePair("paid" , GlobalIsPaid));

                bgtPost = new BackGroundTaskPost(MAP_API_URL_POST_ORDER, "POST", apiParams);
                bgtPost.execute();

                goToOrderCompleted();

            }
这是Log Cat显示为服务器响应的内容

04-03 20:56:08.247: I/json:(690): {"created_at":"2013-04-03T20:56:06Z","drinks_id":null,"id":1351,"name":null,"paid":null,"served":null,"updated_at":"2013-04-03T20:56:06Z"}
我真的很难理解这件事的症结所在,并且已经被困在这件事上有一段时间了。如有任何见解,将不胜感激。如果需要更多的信息,就喊一声

编辑:来自服务器的日志

这是一篇来自简单REST客户端的成功文章

2013-04-03T23:13:31+00:00 app[web.1]: Completed 200 OK in 15ms (Views: 8.7ms | ActiveRecord: 5.2ms)
2013-04-03T23:13:42+00:00 app[web.1]: Started POST "/orders.json" for 89.101.112.167 at 2013-04-03 23:13:42 +0000
2013-04-03T23:13:42+00:00 app[web.1]: Processing by OrdersController#create as JSON
2013-04-03T23:13:42+00:00 app[web.1]:   Parameters: {"updated_at"=>nil, "drinks_id"=>51, "id"=>1021, "name"=>"Test", "paid"=>true, "served"=>nil, "created_at"=>nil, "order"=>{"drinks_id"=>51, "name"=>"Test", "paid"=>true, "served"=>nil}}
2013-04-03T23:13:43+00:00 heroku[router]: at=info method=POST path=/orders.json host=fyp-coffeeshop.herokuapp.com fwd="89.101.112.167" dyno=web.1 connect=1ms service=25ms status=201 bytes=138
2013-04-03T23:13:43+00:00 app[web.1]: Completed 201 Created in 15ms (Views: 0.6ms | ActiveRecord: 13.2ms)
这是来自安卓应用程序的帖子

2013-04-03T22:56:45+00:00 app[web.1]: Started POST "/orders.json" for 89.101.112.167 at 2013-04-03 22:56:45 +0000
2013-04-03T22:56:45+00:00 app[web.1]: Processing by OrdersController#create as JSON
2013-04-03T22:56:45+00:00 app[web.1]: Completed 201 Created in 23ms (Views: 2.2ms | ActiveRecord: 16.3ms)
2013-04-03T22:56:45+00:00 heroku[router]: at=info method=POST path=/orders.json host=fyp-coffeeshop.herokuapp.com fwd="89.101.112.167" dyno=web.1 connect=4ms service=37ms status=201 bytes=138

问题是,当你在安卓系统中构建帖子时,你过度编写了实体(主体)。首先设置,然后再次设置,有效地清除了已设置的内容

这是正确的:

httpPost.setEntity(new UrlEncodedFormEntity(postparams));
但几行之后,你就用以下文字写了一遍:

httpPost.setEntity(new StringEntity("UTF-8"));
所以不要再调用第二个
setEntity()

您可以通过如下方式调整代码来实现您的目标:在UTF-8中设置帖子正文:

httpPost.setEntity(new UrlEncodedFormEntity(postparams, HTTP.UTF_8));

您正在设置JSON的内容类型,但实际上并没有发送JSON,而是发送标准的POST url编码参数

您需要实际发送一个JSON对象:

JSONObject params = new JSONObject();
params.put("drinks_id", GlobalDrinkSelected);
params.put("name", GlobalEditTextInputName);
params.put("paid", GlobalIsPaid);

StringEntity entity = new StringEntity(params.toString());
httpPost.setEntity(entity);

您能否编写一个快速的php脚本来转储帖子中的参数列表,以确保它能够到达那里?将$\u POST数组扔到一个文件中并检查它。我只是在想这个问题。我从来没有发送过一个列表并说它是JSON内容,我总是创建JSONObject,然后发布名称/值对query=JSONObject,然后在我的服务器上将查询值作为JSON字符串。我将从Rest客户端和我的应用程序中注销一个请求以进行比较,我会更新我的question@Dave你能给我举一个你将如何发送它的例子吗?从日志上看,我没有正确发送我的参数谢谢您的回复Cody,我理解您的意思,现在就尝试实现它,虽然我确信过度校正实体没有帮助,但参数仍然没有到达服务器。我肯定也做了一些不正确的事情。我将更新问题中的代码以反映我没有处理的内容*我将更新问题中的代码以反映我当前正在处理的内容问题中的代码是否未在方法postInformation toAPI()中添加参数?编辑:谢谢你的帮助,非常感谢你帮了我很多心痛。通过传入JSON对象并将其添加到实体“entity.setContentType(“application/JSON;charset=UTF-8”);”中,我能够发布到服务器
httpPost.setEntity(new UrlEncodedFormEntity(postparams, HTTP.UTF_8));
JSONObject params = new JSONObject();
params.put("drinks_id", GlobalDrinkSelected);
params.put("name", GlobalEditTextInputName);
params.put("paid", GlobalIsPaid);

StringEntity entity = new StringEntity(params.toString());
httpPost.setEntity(entity);