2016-12-29 7 views
-1

AndroidでHTTP Getメソッドを使用してURLからXMLファイルを取得しようとしています。ブラウザにURLを入力すると、XMLファイルが取得されます。しかし、AndroidでHttpURLConnectionを試してみると、入力ストリームは常にnullになります。私は問題を理解しようとしていますが、無駄です。私はこの問題を理解する助けをしたいと思います。ここ
は私のコードです:
XMLファイルAndroidのURLからXMLを取得するとnullエラーが表示される

<?xml version="1.0" encoding="UTF-8"?> 
<item> 
    <log>27.1823000000</log> 
    <lat>88.5012200000</lat> 
</item> 

非同期タスク

private class GetOnlineData extends AsyncTask<Void, Void, String>{ 

     @Override 
     protected String doInBackground(Void... voids){ 
      String latlog=null; 

      // Accessing link to obtain XML file 
      try{ 
       URL url = new URL(link); 
       HttpURLConnection htc = (HttpURLConnection) url.openConnection(); 
       inputStream = htc.getInputStream(); 
      }catch(Exception e){} 

      // Parsing XML data from input stream 
      if(inputStream!=null){ 
       try { 
        DocumentBuilderFactory xmlparser = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder dBuilder = xmlparser.newDocumentBuilder(); 
        Document dc = dBuilder.parse(inputStream); 

        Element ele = dc.getDocumentElement(); 
        ele.normalize(); 

        NodeList nodeList = dc.getElementsByTagName("item"); 

        for (int i=0; i<nodeList.getLength(); i++){ 
         Node node = nodeList.item(i); 
         if(node.getNodeType() == Node.ELEMENT_NODE){ 
          Element ele2 = (Element) node; 
          latlog = "Longitude: "+getValue("log",ele2)+"\n"; 
          latlog += "Latitude: "+getValue("lat",ele2); 
         } 
        } 
       } catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 

      return latlog; 
     } 

     @Override 
     protected void onPostExecute(String latlog){ 
      if(inputStream==null) { 
       Toast.makeText(getApplicationContext(), "Didn't Work", Toast.LENGTH_SHORT).show(); 
      } else { 
       textView.setText(latlog); 
      } 
     } 
    } 

のgetValue(文字列、要素)

private static String getValue(String tag, Element element) { 
     NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes(); 
     Node node = nodeList.item(0); 
     return node.getNodeValue(); 
    } 
+0

XMLはJSONに切り替えるのにはちょっと古い方法ですか?シンプルでいい# –

+0

そのために、_python-cgi-script_を使って_json_オブジェクトを送る方法を知る必要があります。あなたはそれを行う方法についてまともなチュートリアルを私に指摘できますか?それは本当に役立つだろう。 @teckwei – dannyBoy

+0

うーん..私はサーバー側のPHPを使用しています。私はあなたがグーグルかもしれないと思う。 –

答えて

1

ソースコードに問題がないと思われますが、サーバーにアクセスしています。 URLかもしれすること(URLのタイプミス)間違っている - ので、不足しているいくつかのパラメータかもしれコール

URL url = new URL(link); 

link変数の値を確認してください。 ( "GET")

int responseCode = htc.getResponseCode(); 
if (responseCode == HttpURLConnection.HTTP_OK) { 
    inputStream = htc.getInputStream(); 
    ... 
} 

そしておそらくHttpURLConnectionのshould be configured like htc.setRequestMethod; `またはそのような何か:及びレスポンスコードを分析しようとするようにHTTP認証、プロキシ、クッキーと(Official Documentationを参照してください)。

+0

問題は私のサーバーで本当にありました。私はサーバーのエラーログをチェックし、_mod-security-anormalies_が_Accept Header_がないため要求を拒否していることを示しました。アンドロイドを使用してリクエストするには、どのような_Accept Header_を付ける必要がありますか?また、どのように追加しますか?または、特定のセキュリティを削除するほうがよいでしょうか? – dannyBoy

+0

[this](http://stackoverflow.com/a/15555952/6950238)[Cyril Beschi](http://stackoverflow.com/users/2196599/cyril-beschi)の回答をご覧ください。 –

関連する問題