访问导致我的应用程序崩溃的数组元素

accessing elements of an array causing my app to crash

本文关键字:崩溃 数组元素 应用程序 我的 访问      更新时间:2023-09-26

好的,真的很基本。我就是不明白。我正在分析一个xml提要。我正在标签中搜索图像的正则表达式。此刻,当我打印时

str.match(patt1),我得到:

http://www.highlandradio.com/wp-content/uploads/2013/03/jimmy.jpg,http://www.highlandradio.com/wp-content/uploads/2013/03/jimmy.jpg,jpg

在控制台中。我只需要第一个元素,即

http://www.highlandradio.com/wp-content/uploads/2013/03/jimmy.jpg

为此,我尝试了str.match(patt1)[0],但这一行导致我的应用程序崩溃。我将此变量设置为等于表行的leftImage属性。我还在测试"继续"循环是否为空,因为我认为这可能是问题所在。

我也尝试了str.match(patt1[0]),但这也没有给我想要的输出。我做错了什么?

编辑:下面的APP JS:

    var win1 = Titanium.UI.createWindow({  
    title:'Tab 1',
    backgroundColor:'#fff',
    //tabBarHidden: true
});
var tab = Titanium.UI.createTab({  
    icon:'KS_nav_views.png',
    title:'Tab 1',
    window:win1
});
var data = [];
var table = Ti.UI.createTableView({
    //data:data
});
var url="http://www.highlandradio.com/feed/"; 
//rss feed url
//var url="http://apod.nasa.gov/apod.rss"; //  rss feed url
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function() {
    // Data is returned from the blog, start parsing
    var doc = this.responseXML.documentElement;
    // begin looping through blog posts
    var items = doc.getElementsByTagName("item");
    console.log(items);
    for (var i=0;i<items.length;i++) {
        var str=items.item(i).getElementsByTagName("content:encoded").item(0).text;
        console.log("FIRST STRING TEST "+ str);
        //var src= items.item(i).getElementsByTagName("content:encoded").item(0).getAttribute("src");
        //console.log("FIRST SRC TEST "+ src);
        var patt1=/([a-z'-_0-9'/':'.]*'.(jpg|jpeg|png|gif))/i;

        var urlMatch = str.match(patt1);
        data.push({
            title: items.item(i).getElementsByTagName("title").item(0).text,            
            leftImage: urlMatch.length > 0 ? urlMatch[0] : 'NewsStory.png',
            dataToPass: items.item(i).getElementsByTagName("description").item(0).text,
            className: "TableRow", 
            hasChild: true, 
            jsTest: true,
            js:"external.js"
        });
    }
    table.setData(data);
};
xhr.onerror = function(e) {
    // should do something more robust
    alert('Network error '+e.error);
};
xhr.open('GET',url);
xhr.send();
win1.add(table);

win1.open();

您可以使用数组访问match()的函数结果,如:

// Prints 1st element of str.match(patt1) to console   
console.log(str.match(patt1)[0]);

但是,如果您将来要使用匹配,您应该将结果数组放在变量中并使用它。

我用这行修复了它:

`leftImage: str.match(patt1) !== null ? str.match(patt1)[0] : 'NewsStory.png',

当没有结果而不是未定义时,我忘记了match会返回一个对象。