2016-08-15 23 views
2

URLからXMLを解析する際に問題があります。私は天気アプリを作成して、私はhttp://api.openweathermap.org/からxmlを解析したいと思います。私はこのAsyncTaskのために使用し、それは動作していません。ここに私のコードとすべての返信に感謝です。 ProgressDialogだけが表示され、それ以上は表示されません。また、私はマニフェストのインターネット許可を持っています。Android XML解析AsyncTask

Weather.java

public class Weather extends AsyncTask<String[],Void,String[]> { 

private MainActivity activity; 
private XmlPullParserFactory factoryObj; 
private String url; 
private ProgressDialog pDialog; 


public Weather(MainActivity activity, String url) { 
    this.activity = activity; 
    this.url = url; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    pDialog = new ProgressDialog(activity); 
    pDialog.setMessage("Loading..."); 
    pDialog.setTitle("Please wait"); 
    pDialog.show(); 
} 

@Override 
protected String[] doInBackground(String[]... params) { 

    try{ 

     URL myurl = new URL(url); 
     HttpURLConnection connection = (HttpURLConnection) myurl.openConnection(); 
     connection.setReadTimeout(10000 /* milliseconds */); 
     connection.setConnectTimeout(15000 /* milliseconds */); 
     connection.setRequestMethod("GET"); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream stream = connection.getInputStream(); 


     factoryObj = XmlPullParserFactory.newInstance(); 
     XmlPullParser parser = factoryObj.newPullParser(); 

     parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,false); 
     parser.setInput(stream,null); 
     String[] result = parseXML(parser); 
     stream.close(); 
     return result; 
    }catch(Exception e) 
    { 
     e.printStackTrace(); 
     return null; 
    } 
} 

public String[] parseXML(XmlPullParser parser) throws IOException,XmlPullParserException{ 


    int event; 
    String text=null; 
    String[] result =new String[1]; 


    event = parser.getEventType(); 

    while(event != XmlPullParser.END_DOCUMENT){ 
     String name = parser.getName(); 

     switch(event){ 

      case XmlPullParser.START_TAG: 
       break; 
      case XmlPullParser.TEXT: 
       break; 
      case XmlPullParser.END_TAG: 
       if(name.equals("temperature")) 
        result[0] = parser.getAttributeValue(null,"value"); 
       break; 

     } 
     parser.next(); 


    } 

    return result; 
} 


@Override 
protected void onPostExecute(String[] result) { 
    super.onPostExecute(result); 
    pDialog.dismiss(); 
    activity.callBackData(result); 
} 
} 

とMainActivity.java:

public class MainActivity extends Activity { 


TextView temp; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    temp = (TextView) findViewById(R.id.temptextView); 


    String url ="http://api.openweathermap.org/data/2.5/weather?q=warsaw&mode=xml&appid=35fae97674d2f8032b66a35addf05450"; 
    new Weather(this,url).execute(); 

} 


public void callBackData(String[] result) { 
    temp.setText(result[0]); 

} 
} 
+0

これは例外をスローですか? – Lino

+0

いいえ、アプリケーションは停止しません。 – Mateusz

答えて

0

"温度" はないので、これがあるEND_TAGからSTART_TAG

case XmlPullParser.START_TAG: 
    if(name.equals("temperature")) 
     result[0] = parser.getAttributeValue(null,"value"); 
    break; 

をコードを移動してください明示的な終了タグを持つ

+0

これは私がタグをeningはここ 明示的なと思い、XMLファイルでは、XMLからのコードの一部です: <温度値=「292.08」分=「289.82」最大=「295.93」ユニット=「ケルビン」/> <湿度値= "64" unit = "%" /> <圧力値= "3"ユニット= "hPa" /> – Mateusz

+0

がないという意味で明示的です。とにかく、私の提案はうまくいきますか? – Lino

+0

pl結果[0] = parser.getText(); doesnt work :( – Mateusz

0

@Linoあなたは正しかった! END_TAGをSTART_TAGに変更しても問題ありません。ありがとうございます