android:如何从xml文档中获取信息?

时间:2014-02-27 17:59:16

标签: android xml weather

我有一个程序可以从带有链接的服务器获取天气。我已经做了一些将字符串组合到一个字符串的东西。我现在需要一些东西来从该XML文件中获取信息。

这是我的代码:(我为安全原因更换了API密钥)

package com.example.thelexapp;

import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.webkit.WebView;
import android.widget.TextView;

public class MainActivity extends Activity {


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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void getPositionAndGetWheater(View view) {
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if (location != null) {

        TextView text = (TextView) findViewById(R.id.textView1);
        text.setTextColor(Color.parseColor("#808080"));
        double longitude = location.getLongitude();
        double latitude = location.getLatitude();
        String longitudestring = String.valueOf(longitude);
        String latitudestring = String.valueOf(latitude);
        String URLforweather = "http://api.worldweatheronline.com/free/v1/weather.ashx?q=" + longitudestring + "," + latitudestring + "&format=xml&num_of_days=1&key=APIKEYIREPLACEDb";
        WebView webview = (WebView) findViewById(R.id.webview);
        webview.loadUrl(URLforweather);
    } else {
        final TextView textViewToChange = (TextView) findViewById(R.id.textView1);
        textViewToChange.setText("Unable to get weather information.");
        TextView text = (TextView) findViewById(R.id.textView1);
        text.setTextColor(Color.parseColor("#FF0000"));
    }

}

}

2 个答案:

答案 0 :(得分:0)

不幸的是,在这种情况下你不能使用WebView,因为你很容易will not be able to get html content as a string。相反,请参阅here了解如何从URL获取源代码。您需要设置AsyncTask并在其doInBackground()函数中执行加载。

将内容放入字符串后,您可以按this tutorial进行解析。

答案 1 :(得分:0)

我从你的问题中了解到你需要从你拥有的字符串中创建文档对象。  作为一个可能的解决方案只需在功能下面包含此功能并使用它。 这将给你w3cdom对象。 您需要做的就是使用任何xml解析器api并根据您的要求提取节点值。

private static Document convertStringToDocument(String xmlStr) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
    DocumentBuilder builder;  
    try 
    {  
        builder = factory.newDocumentBuilder();  
        Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) ); 
        return doc;} catch (Exception e) {  
        e.printStackTrace();  
    } 
    return null;
}