【问题标题】:accessing elements of an array causing my app to crash访问数组的元素导致我的应用程序崩溃
【发布时间】:2013-07-15 13:36:57
【问题描述】:

好的,非常基本的问题。我只是不明白这个。我正在解析一个 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]) 但这个 si 也没有给我想要的输出。我做错了什么?

编辑: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();

【问题讨论】:

  • 你能定义“崩溃”是什么意思吗?
  • @Ray Nicholas 通过崩溃我的意思是,应用程序停留在启动屏幕上,并且 str.match(patt1)[0] 行以蓝色突出显示,我被告知要调试该行

标签: javascript xml image syntax null


【解决方案1】:

你可以通过用户数组访问match()的函数结果,如:

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

但是如果你以后要使用匹配,你应该把结果数组放到变量中并使用它。

【讨论】:

  • 试试这个:var matches = str.match(patt1); console.log(matches[0]);
  • 仍然导致应用程序崩溃。没看懂
  • 因为该行以蓝色突出显示,我被告知要调试。日志非常长。我使用的是钛,只要用它运行任何基本的应用程序都会产生一个非常长的日志。我要发在这里吗?
  • 总比没有好)
  • 好的,现在我正在尝试解决匹配是否为空的问题,但它基于与您相同的原则,并且我在与您相同的位置出现蓝色突出显示的行错误。我的 app.js 如下仅供参考:。
【解决方案2】:

我用这条线解决了它:

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

I forgot match 在没有结果而不是未定义时返回一个对象。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多