Второй проход в urlConnection.getInputStream () возвращает пустой документ - PullRequest
1 голос
/ 10 февраля 2012

У меня есть процедура, которая получает ответ от веб-службы https. При первом вызове подпрограммы она работает отлично, возвращая xml, который я могу обработать. При следующем вызове с точно такими же параметрами возвращается пустой документ, который позже вызывает ошибку. Если я снова вызываю подпрограмму, она работает - фактически она возвращает пустые документы каждый раз, когда она вызывается. Я подумал, что, возможно, я не закрывал urlConnection должным образом, но в коде это выглядит нормально.

Единственное, о чем я могу думать, это то, что процедура вызывается из события postExecute в асинхронном запросе. Тем не менее, за один раз выполняется только один запрос, поэтому больше нечего конфликтовать.

Пример кода ниже:

private VEDResult LookupReg(String RegNo)
{
  HttpURLConnection urlConnection = null;
  InputStream in = null;

  VEDResult VR = new VEDResult();

  try 
  {          

    // Create the URL
    //
    URL url = null;
    url = new URL("https://<path>/getved.php?vrm=" + RegNo);

    // Open the URL connection
    //
    urlConnection = (HttpURLConnection) url.openConnection();

    // Fetch the data from the server
        //
    in = new BufferedInputStream(urlConnection.getInputStream());

    // Set up document builder for creating the XML document
    //
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    db = dbf.newDocumentBuilder();

    // Create the XML document from the data we received
    //
    Document doc = db.parse(in);
    doc.getDocumentElement().normalize();

    in.close();
    in = null;

    // Get the individual nodes from the document and assign them to the result record
    //
    NodeList MakeNodes = doc.getElementsByTagName("MAKE");
    if (MakeNodes != null && MakeNodes.getLength() != 0)
      VR.Make = MakeNodes.item(0).getTextContent();

    NodeList ModelNodes = doc.getElementsByTagName("MODEL");
    if (ModelNodes != null && ModelNodes.getLength() != 0)
      VR.Model = ModelNodes.item(0).getTextContent();

    NodeList EmissionsNodes = doc.getElementsByTagName("CO2EMISSIONS");
    if (EmissionsNodes != null && EmissionsNodes.getLength() != 0)
      VR.Emissions = EmissionsNodes.item(0).getTextContent();

    NodeList CostNodes = doc.getElementsByTagName("VED12MONTHS");
    if (CostNodes != null && CostNodes.getLength() != 0)
      VR.Cost = CostNodes.item(0).getTextContent();

    NodeList RegNodes = doc.getElementsByTagName("VRM");
    if (RegNodes != null && RegNodes.getLength() != 0)
      VR.RegNo = RegNodes.item(0).getTextContent();

    NodeList BandNodes = doc.getElementsByTagName("VEDBAND");
    if (BandNodes != null && BandNodes.getLength() != 0)
      VR.VEDBand = BandNodes.item(0).getTextContent().toUpperCase();


  } 
  catch (Exception e) 
  {
    Log.v("fs", e.toString());
  }   
  finally 
  {
    // Tidy up
    //
    urlConnection.disconnect();
    urlConnection = null;

  }    

  return VR;
}

Ответы [ 2 ]

0 голосов
/ 07 марта 2014

Перед тем как открыть вопрос подключения:

System.setProperty("http.keepAlive", "false");
0 голосов
/ 10 февраля 2012

Попробуйте выполнять сборку мусора после каждого вызова.

System.runFinalization();
System.gc();
...