从OnClickListener Android打开网址

时间:2013-04-22 01:06:28

标签: java android url webview onclicklistener

我正在尝试从Android中的按钮打开一个网页,但却无法让它发挥作用。我找到了一个看起来很简单的教程,但诀窍是我试图显示一个从另一个活动类中创建的对象中获取的URL。我正在使用的代码是标准的OnClickListener:

private void addListeneronButton() {
    // TODO Auto-generated method stub
    button1 = (Button) findViewById(R.id.stationHistory);

    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

          Intent browserIntent = 
                        new Intent(Intent.ACTION_VIEW, Uri.parse(//need help here));
            startActivity(browserIntent);

        }

该项目正在阅读气象站列表。我有一个具有适当的getter / setter的Station类,因此Url已经存储。我只是不知道从这里访问的适当命令。我认为它会像Uri.parse(station.get_url)一样容易,但那只是提示我创建局部变量......有没有人有任何建议?

<station>
    <station_id>NFNA</station_id>
    <state>FJ</state>
    <station_name>Nausori</station_name>
    <latitude>-18.05</latitude>
    <longitude>178.567</longitude>
    <html_url>http://weather.noaa.gov/weather/current/NFNA.html</html_url>
    <rss_url>http://weather.gov/xml/current_obs/NFNA.rss</rss_url>
    <xml_url>http://weather.gov/xml/current_obs/NFNA.xml</xml_url>
</station>

<station>
    <station_id>KCEW</station_id>
    <state>FL</state>
            <station_name>Crestview, Sikes Airport</station_name>
    <latitude>30.79</latitude>
    <longitude>-86.52</longitude>
            <html_url>http://weather.noaa.gov/weather/current/KCEW.html</html_url>
            <rss_url>http://weather.gov/xml/current_obs/KCEW.rss</rss_url>
            <xml_url>http://weather.gov/xml/current_obs/KCEW.xml</xml_url>
</station>

<station>
    <station_id>KDTS</station_id>
    <state>FL</state>
            <station_name>Destin, Ft. Walton Beach Airport</station_name>
    <latitude>30.4</latitude>
    <longitude>-86.47</longitude>
            <html_url>http://weather.noaa.gov/weather/current/KDTS.html</html_url>
            <rss_url>http://weather.gov/xml/current_obs/KDTS.rss</rss_url>
            <xml_url>http://weather.gov/xml/current_obs/KDTS.xml</xml_url>
</station>

我正在使用构造函数/ getter / setter将它们解析为Station Class。从上一个活动中,用户选择其中一个站。在下一个活动中,它显示来自此xml的name,id等元素。但现在我想从一个按钮打开电台网址,我不确定如何。

2 个答案:

答案 0 :(得分:2)

我想我现在看到你说的是问题,虽然你真的没说清楚。你有这个

private void addListeneronButton() {
// TODO Auto-generated method stub
button1 = (Button) findViewById(R.id.stationHistory);

button1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

      Intent browserIntent = 
                    new Intent(Intent.ACTION_VIEW, Uri.parse(station.get_url);
        startActivity(browserIntent);

    }

并且它告诉您station.get_url不是变量,因此您需要创建一个变量。 get_url如果是方法,则应为get_url()。如果您的课程为Station(大写“S”),那么您可以使用Station.get_url()访问该课程。但是,您可能需要传入某个参数来告诉它要获取哪个URL。这是假设它是static方法。如果不是,那么您需要创建Station类的实例并调用方法

Station myStation = new Station();  //pass parameters here to constructor as needed
String address = myStation.get_url();  // object

然后,您可以在address中使用Intent

 Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(address));
 startActivity(browserIntent);

如果http://没有与url一起传回,则必须在Intent中使用它之前附加它,正如wangyif2已经说明的那样。我希望这是有道理的,但我能用所提供的信息做到最好。

答案 1 :(得分:1)

在进行URI解析时,尝试将http://放在字符串之前:

private void addListeneronButton() {
   button1 = (Button) findViewById(R.id.stationHistory);
   button1.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View arg0) {
           Intent browserIntent = new Intent(Intent.ACTION_VIEW,
             Uri.parse(Station.getHtmlUrl("NFNA"));
           startActivity(browserIntent);
       }
}

车站类:

public static String getHtmlUrl(String station) { 
    //return the full URL here based on station 
    //eg. "http://weather.noaa.gov/weather/current/NFNA.html"
}