2013-01-15 226 views
1

我嘗試發送一個xml文件,在android中的http到一個rails服務器。從Android發送一個HTTP請求到一個rails服務器

我的Android發送碼:

String link = "http://10.0.2.2:3000/export"; 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(link); 

    try { 
     String xmlFile = createXml(locationList); 
     StringEntity entity = new StringEntity(xmlFile, "UTF-8"); 
     httppost.setEntity(entity); 
     httppost.addHeader("Content-Type", "application/xml"); 
     HttpResponse response = httpclient.execute(httppost); 
     Log.d("response reason phrase", "" 
       + response.getStatusLine().getReasonPhrase()); 
     Log.d("response content", "" 
       + response.getStatusLine().getStatusCode()); 
    } catch (ClientProtocolException e) { 
     Log.d("exception", e.getMessage()); 
    } catch (IOException e) { 
     Log.d("exception", e.getMessage()); 
    } 

在鐵軌我創建了一個控制器的方法來監聽輸出 - 鏈接:

def export 

begin 
    result = Net::HTTP.get(URI.parse("http://localhost:3000/export")) 
    MyLog.debug "#{result}" 
    xml_doc = Nokogiri::XML(result) 


    locations = xml_doc.xpath("//location") 

    if locations.count > 0 
    training = Training.create! 

    locations.each do |xml_location| 
     location = Location.new 
     location.latitude = xml_location.xpath("latitude").text 
     location.longitude = xml_location.xpath("longitude").text 
     location.training_id = training.id 
     location.save! 
    end 
    end 
    # end 
rescue TimeoutError => e 
    MyLog.debug "timeout #{e}" 
end 
end 

,我被迫創建export.html。 ERB,其中包含以下內容:

Nothing to see

我的routes.rb包含此:

match 'export' => 'Trainings#export', as: "export", :via => [:get, :post] 

但是,如果我用我的應用程序立即請求到服務器,我看到在我的CMD如下:

Started POST "/export" for 127.0.0.1 at 2013-01-15 22:47:59 +0100 
    Connecting to database specified by database.yml 
    Processing by TrainingsController#export as HTML 
    Parameters: {"training"=>{"location"=>[{"longitude"=>"60.0", 
    "latitude"=>"60.0"}, {"longitude"=>"59.9999", "latitude"=>"60.0"}, 
    {"longitude"=>"59.99995", "latitude"=>"59.9999"}]}} 
    WARNING: Can't verify CSRF token authenticity 
    Rendered trainings/export.html.erb within layouts/application (25.0ms) 
    Completed 200 OK in 61633ms (Views: 576.0ms | ActiveRecord: 0.0ms) 

在此之後它不是更可能訪問到我的服務器和我會看到在控制檯始終如下:

 Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-01-15 22:53:00 +0100 
    Served asset /jquery.js - 200 OK (76ms) 
    [2013-01-15 22:53:00] ERROR Errno::ECONNABORTED: Eine bestehende Verbindung wurd 
    e softwaregesteuertdurch den Hostcomputer abgebrochen. 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:396:in `write' 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:396:in `<<' 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:396:in `_write_data' 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:368:in `send_body_string' 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:249:in `send_body' 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:152:in `send_response' 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:110:in `run' 
    C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' 

我的XML的解析是幸運的工作,因爲我已經在複製方法創建的XML文件進行了測試,但希望你能幫助我理解我的問題:) 。我搜索了很多小時,但我沒有,這幫助我解決了我的問題。

回答

1

幸運的是,我通過朋友的提示修復了這個問題。

我的誤解是,控制器方法通常會聽取導出鏈接,所以我有兩次listend。

所以溶液刪除HTTP GET:

 result = Net::HTTP.get(URI.parse("http://localhost:3000/export")) 

然後,我不得不刪除XML解析,因爲我得到了一個哈希信息

相關問題