2014-05-07 3 views
0

Я пытаюсь подключить и извлечь данные из XML-файла с сервера. Использование данных при получении XML-данных довольно велико для отдельных данных в XML-файле. Он превысил до 700 байт, где, если я открыт непосредственно из браузера на Android-телефоне, это всего лишь 18 байт.Использование данных при подключении к серверу

Почему так много разных по количеству байтов при получении данных через приложение? Ниже приведен мой асинтезный код при получении XML-данных с сервера. Спасибо

public class GetXMLTask extends AsyncTask<String, Void, String> { 
@Override 
protected String doInBackground(String... urls) { 
    if (!isCancelled()) { 
     try { 
      String output = null; 
      //String[] newurl = { GlobalVariables.Global_URL + "/appstatus.xml" }; 
      for (String url : urls) { 
       output = getOutputFromUrl(url); 
      } 

      return output; 
     } catch (Exception e) { 
      return null; 
     } 
    } 
    else 
    { 
     return null; 
    } 
} 
@Override 
    protected void onCancelled() { 

    } 

private String getOutputFromUrl(String url) { 
    StringBuffer output = new StringBuffer(""); 
    try { 
     InputStream stream = getHttpConnection(url); 
     BufferedReader buffer = new BufferedReader(new InputStreamReader(
       stream)); 
     String s = ""; 
     while ((s = buffer.readLine()) != null) 
      output.append(s); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 

    } 
    return output.toString(); 
} 

// Makes HttpURLConnection and returns InputStream 
private InputStream getHttpConnection(String urlString) throws IOException { 
    InputStream stream = null; 
    URL url = new URL(urlString); 
    URLConnection connection = url.openConnection(); 

    try { 
     HttpURLConnection httpConnection = (HttpURLConnection) connection; 
     httpConnection.setRequestMethod("GET"); 
     httpConnection.connect(); 

     if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
      stream = httpConnection.getInputStream(); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 

    } 
    return stream; 
} 

@Override 
protected void onPostExecute(String output) { 
    String XML = output; 
    // GlobalVariables.Global_data = output; 
    // String XML = prepareXML(); 

    try { 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLReader xr = sp.getXMLReader(); 

     /** Create handler to handle XML Tags (extends DefaultHandler) */ 
     MyXMLHandler myXMLHandler = new MyXMLHandler(); 
     xr.setContentHandler(myXMLHandler); 

     ByteArrayInputStream is = new ByteArrayInputStream(XML.getBytes()); 
     xr.parse(new InputSource(is)); 
    } catch (Exception e) { 

    } 
} 

}

ответ

0

Как Вы измеряете использование данных? Я думаю, вы в замешательстве. Возможно, вы просматриваете размер файла 18 байтов при использовании браузера, но вычисляете запрос + ответ (включая файл), хотя и мобильное устройство.

Если вы обеспокоены размером пакета HTTP, обновление до WebSockets

Intro to WebSockets and Why

WebSockets in Android

+0

Привет, я проверить использование данных с помощью 3G сторожевого приложения. Мое приложение будет запрашивать данные с сервера каждые 5 секунд в фоновом режиме. Любое предложение? спасибо – user3567682

+0

Итак, вы смущены, как я уже сказал. Когда вы просматриваете приложение, вы видите размер запроса, отправленного вашим приложением + ответ, отправленный с сервера (в который входит 18-байтовый XML-файл). Таким образом, размер файла xml по-прежнему составляет 18 байт, но общая передача составляет 800 байт. Это совершенно нормально. Запрос может содержать 300-400 байтов данных заголовка, а также ответ. –

+0

спасибо. теперь я понимаю. – user3567682

Смежные вопросы