0
  I have a json data in my remote server,and i want to show it in table view,here is my json data  

[{"offerType":"Discount","offerName":"BURBERRY - メンズ レザー コート コレクションで 2 つ購入すると 1 つ無料"},{"offerType":"Discount","offerName":"ARMANI JUNIOR- 20% オフINR 30000 相当の購入"}]

      var url = "http://203.122.12.58:8080/api?                username=superuser&password=superuser&action=invokeService&serviceName=offerAction&methodNa    me=getMyOffers&customerId=CUS-12220&storeId=CMPNY-3376";

var win = Ti.UI.createWindow();

 win = Ti.UI.currentWindow;  
 win.setBackgroundColor('gray');
 //win.setBackgroundColor = 'white';
  var table = Ti.UI.createTableView();
  var tableData = [];
  var json, fighters, fighter, i, row, nameLabel, nickLabel,offerType,offerName;

 var xhr = Ti.Network.createHTTPClient({
  onload: function() {
// Ti.API.debug(this.responseText);

json = JSON.parse(this.responseText);
for (i = 0; i < json.length; i++) {

    console.log("json = %d",i);
    offerType = json[i].offerType;
    row = Ti.UI.createTableViewRow({
        height:'60dp'
    });
    nameLabel = Ti.UI.createLabel({
        text:offerType,
        font:{
            fontSize:'24dp',
        fontWeight:'bold'
    },
    height:'auto',
    left:'10dp',
    top:'5dp',
    color:'#000',
    touchEnabled:false
    });
    offerName = json[i].offerName;
    nickLabel = Ti.UI.createLabel({
    text:'"' + fighter.nickname + '"',
    font:{
        fontSize:'16dp'
    },
    height:'auto',
    left:'15dp',
    bottom:'5dp',
    color:'#000',
    touchEnabled:false
    });

    row.add(nameLabel);
    row.add(nickLabel);
    tableData.push(row);
    }

table.setData(tableData);
},
 onerror: function(e) {
Ti.API.debug("STATUS: " + this.status);
Ti.API.debug("TEXT:   " + this.responseText);
Ti.API.debug("ERROR:  " + e.error);
alert('There was an error retrieving the remote data. Try again.');
},
timeout:5000
});

xhr.open("GET", url);
xhr.send();

どうすれば目標を達成できますか、よろしくお願いします。

アクシャイ

4

1 に答える 1

1

あなたのコードはかなり近かったです。いくつかの変更を加えたので、それらを比較して修正方法を確認する必要があります。この例では、サービスを読み取り、テーブルに 2 つのエントリを表示します。

どのように変更されたかを詳述したコード内のコメントを参照してください。

//**** Not sure if this is an issue with formating on Stackoverflow or copy and paste, but the spaces in the URL are causing an issue.****
//var url = "http://203.122.12.58:8080/api?                username=superuser&password=superuser&action=invokeService&serviceName=offerAction&methodNa    me=getMyOffers&customerId=CUS-12220&storeId=CMPNY-3376";
var url = "http://203.122.12.58:8080/api?username=superuser&password=superuser&action=invokeService&serviceName=offerAction&methodName=getMyOffers&customerId=CUS-12220&storeId=CMPNY-3376";

var win = Ti.UI.createWindow();
 //*****If you are calling this from another window, you may need this is your overall code, but my example I removed it.***** 
 //win = Ti.UI.currentWindow;  
win.setBackgroundColor('gray');
 //win.setBackgroundColor = 'white';
var table = Ti.UI.createTableView();
var tableData = [];
// **** Removed variable fighters because it is never used.
// **** Removed the fighter variable because it is never used.
var json, i, row, nameLabel, nickLabel, offerType, offerName;

var xhr = Ti.Network.createHTTPClient({
    onload: function() {
        // Ti.API.debug(this.responseText);
        json = JSON.parse(this.responseText);
        for (i = 0; i < json.length; i++) {
            console.log("json = %d",i);
            offerType = json[i].offerType;
            row = Ti.UI.createTableViewRow({
                height:'60dp'
            });
            nameLabel = Ti.UI.createLabel({
                text: offerType,
                font:{
                    fontSize:'24dp',
                    fontWeight:'bold'
                },
                height:'auto',
                left:'10dp',
                top:'5dp',
                color:'#000',
                touchEnabled:false
            });
            offerName = json[i].offerName;
            nickLabel = Ti.UI.createLabel({
            //text:'"' + fighter.nickname + '"',  ***** fighter.nickname isn't defined anywhere so it is giving an error.  You defined offerName right above it so I assume that it
            // was the intended variable here. 
                text: offerName,
                font:{
                    fontSize:'16dp'
                },
                height:'auto',
                left:'15dp',
                bottom:'5dp',
                color:'#000',
                touchEnabled:false
            });

            row.add(nameLabel);
            row.add(nickLabel);
            tableData.push(row);
        }

        table.setData(tableData);
    },
    onerror: function(e) {
        Ti.API.debug("STATUS: " + this.status);
        Ti.API.debug("TEXT:   " + this.responseText);
        Ti.API.debug("ERROR:  " + e.error);
        alert('There was an error retrieving the remote data. Try again.');
    },
    timeout:5000
});

xhr.open("GET", url);
xhr.send();
// Thought this might just be a test application, the table was never added to the window, so it would never be displayed so we can see the data.  This is how you add the table.
win.add(table);

// I added code here to OPEN the window so I could see something displayed.  Otherwise I just get the Appcelerator splash screen
win.open();
于 2013-06-13T13:23:21.480 に答える