Error: App run on PC but not run on Device


#1

Hi!

My app has services with implements method that will be to receive data of server.
I created a global array that simulate the database query.
I use this array in 3 services.
Into some service I get this var and create a other var to provide the datas to the controllers.

var services = angular.module('starter.services', ['ngResource']);

var view = [
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 1,
        'QuestaoDescricao': 'A leitura do texto dá suporte para que se considere correto afirmar que o Estado da Bahia',
        'AssuntoNome': 'Interpretação de Texto',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'resume toda a cultura do Brasil, na medida em que é o berço da formação identitária do povo brasileiro.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 1
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 1,
        'QuestaoDescricao': 'A leitura do texto dá suporte para que se considere correto afirmar que o Estado da Bahia',
        'AssuntoNome': 'Interpretação de Texto',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'tem como principal característica o multiculturalismo consolidado e preservado a partir da conciliação entre os costumes e as tradições de povos diversos.',
        'AlternativaEhCorreta': 1,
        'AlternativaOrdem': 2
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 1,
        'QuestaoDescricao': 'A leitura do texto dá suporte para que se considere correto afirmar que o Estado da Bahia',
        'AssuntoNome': 'Interpretação de Texto',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'revela, por meio do sincretismo cultural configurado ao longo dos séculos, a revisitação de   práticas ligadas a preconceitos e intolerâncias identificadas na música, na religião e no discurso oficial da história étnica do brasileiro.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 3
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 1,
        'QuestaoDescricao': 'A leitura do texto dá suporte para que se considere correto afirmar que o Estado da Bahia',
        'AssuntoNome': 'Interpretação de Texto',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'permite o reconhecimento da miscigenação da população baiana tanto na organização geográfica quanto na construção ideológica da cidade de Salvador, que se torna espaço democrático de manifestações artísticas   de todas as classes e culturas.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 4
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 1,
        'QuestaoDescricao': 'A leitura do texto dá suporte para que se considere correto afirmar que o Estado da Bahia',
        'AssuntoNome': 'Interpretação de Texto',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'tem a sua capital como representante da cultura do Brasil, o que possibilita a revelação de intelectuais e de artistas baianos que, por se tornarem famosos até fora do país, constituem a principal estratégia turística para a sua manutenção econômica e social.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 5
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 2,
        'QuestaoDescricao': 'A alternativa que apresenta uma expressão equivalente, devidamente contextualizada, à que se encontra em negrito no fragmento "uma rica cultura em constante efervescência" (l. 12) é a',
        'AssuntoNome': 'Semântica',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'permanente mudança.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 1
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 2,
        'QuestaoDescricao': 'A alternativa que apresenta uma expressão equivalente, devidamente contextualizada, à que se encontra em negrito no fragmento "uma rica cultura em constante efervescência" (l. 12) é a',
        'AssuntoNome': 'Semântica',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'ininterrupta evolução.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 2
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 2,
        'QuestaoDescricao': 'A alternativa que apresenta uma expressão equivalente, devidamente contextualizada, à que se encontra em negrito no fragmento "uma rica cultura em constante efervescência" (l. 12) é a',
        'AssuntoNome': 'Semântica',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'incessante criatividade.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 3
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 2,
        'QuestaoDescricao': 'A alternativa que apresenta uma expressão equivalente, devidamente contextualizada, à que se encontra em negrito no fragmento "uma rica cultura em constante efervescência" (l. 12) é a',
        'AssuntoNome': 'Semântica',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'contínua movimentação.',
        'AlternativaEhCorreta': 1,
        'AlternativaOrdem': 4
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 2,
        'QuestaoDescricao': 'A alternativa que apresenta uma expressão equivalente, devidamente contextualizada, à que se encontra em negrito no fragmento "uma rica cultura em constante efervescência" (l. 12) é a',
        'AssuntoNome': 'Semântica',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'inabalável comoção.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 5
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 3,
        'QuestaoDescricao': 'A análise linguística que se faz do termo transcrito do texto está correta em',
        'AssuntoNome': 'Análise Morfossintática',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'O vocábulo "marca" (l. 1) caracteriza-se como uma derivação imprópria, pois, em seu argumento sobre a principal característica da Bahia, o articulista utiliza-se da mudança da classe gramatical desse termo.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 1
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 3,
        'QuestaoDescricao': 'A análise linguística que se faz do termo transcrito do texto está correta em',
        'AssuntoNome': 'Análise Morfossintática',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'A expressão "à mistura de povos" (l. 2) apresenta o uso facultativo da crase e traz um modificador nominal, na medida em que o termo preposicionado "de povos" especifica o nome "mistura".',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 2
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 3,
        'QuestaoDescricao': 'A análise linguística que se faz do termo transcrito do texto está correta em',
        'AssuntoNome': 'Análise Morfossintática',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'O advérbio "aqui" (l. 4), embora apresente valor circunstancial de lugar, assume, principalmente, ideia de tempo presente, explicitando o contexto  histórico a que o articulista, que se encontra no Estado da Bahia, se refere.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 3
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 3,
        'QuestaoDescricao': 'A análise linguística que se faz do termo transcrito do texto está correta em',
        'AssuntoNome': 'Análise Morfossintática',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'A expressão "manifestações folclóricas seculares" (l. 5), assim como "a maior população de origem negra do mundo" (l. 16-17), assume o valor sintático de sujeito posposto  ao verbo, tematizando a ideia de manutenção e valorização da cultura presente na Bahia e também o traço negro que ela comporta.',
        'AlternativaEhCorreta': 1,
        'AlternativaOrdem': 4
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 3,
        'QuestaoDescricao': 'A análise linguística que se faz do termo transcrito do texto está correta em',
        'AssuntoNome': 'Análise Morfossintática',
        'DisciplinaNome': 'Português',
        'AlternativaDescricao': 'As formas verbais "pode ser vista e sentida", em "A cultura da Bahia é plural e pode ser vista e sentida no semblante da população", (l. 13-14), evidenciam uma ação praticada pelo sujeito a partir de comportamentos considerados antitéticos "ver e sentir"',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 5
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 4,
        'QuestaoDescricao': 'A degradação do patrimônio histórico/cultural construído, como registra o texto, põe em risco a memória',
        'AssuntoNome': 'História do Brasil',
        'DisciplinaNome': 'História',
        'AlternativaDescricao': 'de um segmento da sociedade baiana constituída por grandes proprietários, negociantes e altos funcionários que, no século XVIII e parte do século XIX, ocupavam os casarões da região.',
        'AlternativaEhCorreta': 1,
        'AlternativaOrdem': 1
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 4,
        'QuestaoDescricao': 'A degradação do patrimônio histórico/cultural construído, como registra o texto, põe em risco a memória',
        'AssuntoNome': 'História do Brasil',
        'DisciplinaNome': 'História',
        'AlternativaDescricao': 'da riqueza de um bairro essencialmente comercial que, no período colonial, abrigava lojas de comerciantes de gêneros e os traficantes de escravos.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 2
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 4,
        'QuestaoDescricao': 'A degradação do patrimônio histórico/cultural construído, como registra o texto, põe em risco a memória',
        'AssuntoNome': 'História do Brasil',
        'DisciplinaNome': 'História',
        'AlternativaDescricao': 'do grupo constituído pelo clero secular e pelas ordens religiosas que, no período monárquico, ocuparam a região com suas igrejas e conventos, desalojando os antigos moradores.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 3
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 4,
        'QuestaoDescricao': 'A degradação do patrimônio histórico/cultural construído, como registra o texto, põe em risco a memória',
        'AssuntoNome': 'História do Brasil',
        'DisciplinaNome': 'História',
        'AlternativaDescricao': 'da classe dos escravos libertos que, após a extinção do tráfico em 1850, foram ali confinados pelo governo da Província da Bahia.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 4
    },
    {
        'id': 1,
        'ano': 2015,
        'semestre': 2,
        'QuestaoNumero': 4,
        'QuestaoDescricao': 'A degradação do patrimônio histórico/cultural construído, como registra o texto, põe em risco a memória',
        'AssuntoNome': 'História do Brasil',
        'DisciplinaNome': 'História',
        'AlternativaDescricao': 'a instalação de imigrantes das mais variadas origens que recebiam, no século XVIII, autorização do governo colonial para que ali fixassem residências.',
        'AlternativaEhCorreta': 0,
        'AlternativaOrdem': 5
    }
];

function containsQuestionInArray(_obj, _array){
    if(_array.length == 0) return false;
    var _i = 0;
    while((_i < _array.length) && (_obj.ano != _array[_i].provaAno || _obj.semestre != _array[_i].provaSemestre || _obj.QuestaoNumero != _array[_i].numero)){
        _i++;
    }
    return _i != _array.length;
}

services.factory('ProvaViewPorAno', function(){
    //TODO: consulta de retorno JSON
    var objView = {};
    var idx = 0;
    for(idx = 0; idx < view.length; idx++){
        if(view.hasOwnProperty(idx.toString())){
            //Add Ano
            if(!objView.hasOwnProperty(view[idx].ano.toString())){
                objView[view[idx].ano] = {};
            }
            //Add Semestre
            if(!objView[view[idx].ano].hasOwnProperty(view[idx].semestre.toString())){
                objView[view[idx].ano][view[idx].semestre] = {};
            }
            //Add questao
            if(!objView[view[idx].ano][view[idx].semestre].hasOwnProperty(view[idx].QuestaoNumero.toString())){
                objView[view[idx].ano][view[idx].semestre][view[idx].QuestaoNumero] = {
                    'numero': view[idx].QuestaoNumero,
                    'descricao': view[idx].QuestaoDescricao,
                    'assunto': view[idx].AssuntoNome,
                    'disciplina': view[idx].DisciplinaNome,
                    'complemento':{
                        'texto': view[idx].ComplementoTexto.split("<br/>"),
                        'imagem': view[idx].ComplementoImagem,
                        'referencia': view[idx].ComplementoReferencia
                    },
                    'alternativas':{}
                };
            }
            objView[view[idx].ano][view[idx].semestre][view[idx].QuestaoNumero].alternativas[view[idx].AlternativaOrdem] = {
                'descricao': view[idx].AlternativaDescricao,
                'ehCorreta': view[idx].AlternativaEhCorreta,
                'ordem': view[idx].AlternativaOrdem,
                'class': '',         //foi selecionado ? RED ou GREEN : VAZIO
                'desabilitado': '',  //Bloquear campo
                'selecionado': false //Esta foi a alternativa selecionada pelo usuário
            };
        }
    }
    return{
        getByYear: function(ano, semestre){
            return ano in objView ? semestre in objView[ano] ? objView[ano][semestre] : [] : [];
        },
        getQuestion: function(ano, semestre, numero){
            return ano in objView ? semestre in objView[ano] ? numero in objView[ano][semestre] ? objView[ano][semestre][numero] : [] : [] : [];
        },
        getTotalQuestions: function(ano, semestre){
            var count = 0;
            for(idx in objView[ano][semestre]){
                count++;
            }
            return count;
        },
        setQuestion: function(ano, semestre, numero, _newObjView){
            if(ano in objView && semestre in objView[ano] && numero in objView[ano][semestre]){
                objView[ano][semestre][numero] = _newObjView;
            }
        }
    };
});

services.factory('ProvaViewPorAssunto', function(){
    //TODO: consulta de retorno JSON
    var objView = {};
    var idx;
    var idxUltimoInserido;
    var linha;
    for(idx = 0; idx < view.length; idx++){
        if(view.hasOwnProperty(idx.toString())){
            linha = view[idx];
            if(!objView.hasOwnProperty(linha.AssuntoNome.toString())){
                objView[linha.AssuntoNome] = [];
            }
            if(!containsQuestionInArray(linha,objView[linha.AssuntoNome])){
                objView[linha.AssuntoNome].push({
                    'provaAno': linha.ano,
                    'provaSemestre': linha.semestre,
                    'numero': linha.QuestaoNumero,
                    'descricao': linha.QuestaoDescricao,
                    'assunto': linha.AssuntoNome,
                    'disciplina': linha.DisciplinaNome,
                    'complemento':{
                        'texto': linha.ComplementoTexto.split("<br/>"),
                        'imagem': linha.ComplementoImagem,
                        'referencia': linha.ComplementoReferencia
                    },
                    'alternativas':{}
                });
            }
            idxUltimoInserido = objView[linha.AssuntoNome].length-1;
            objView[linha.AssuntoNome][idxUltimoInserido].alternativas[linha.AlternativaOrdem] = {
                'descricao': linha.AlternativaDescricao,
                'ehCorreta': linha.AlternativaEhCorreta,
                'ordem': linha.AlternativaOrdem,
                'class': '',         //foi selecionado ? RED ou GREEN : VAZIO
                'desabilitado': '',  //Bloquear campo
                'selecionado': false //Esta foi a alternativa selecionada pelo usuário
            };
        }
    }
    return{
        getByAssunto: function(assunto){
            return assunto in objView ? objView[assunto] : [];
        },
        getQuestion: function(assunto, idx){
            return assunto in objView ? idx in objView[assunto] ? objView[assunto][idx] : [] : [];
        },
        getTotalQuestions: function(assunto){
            return assunto in objView ? objView[assunto].length : 0;
        },
        setQuestion: function(assunto, idx, _newObjView){
            objView[assunto][idx] = _newObjView;
        }
    };
});


services.factory('ProvaViewPorMateria', function(){
    //TODO: consulta de retorno JSON
    var _objView = {};
    var idx;
    var idxUltimoInserido;
    var linha;
    for(idx = 0; idx < view.length; idx++){
        if(view.hasOwnProperty(idx.toString())){
            linha = view[idx];
            if(!_objView.hasOwnProperty(linha.DisciplinaNome.toString())){
                _objView[linha.DisciplinaNome] = [];
            }
            if(!containsQuestionInArray(linha,_objView[linha.DisciplinaNome])){
                _objView[linha.DisciplinaNome].push({
                    'provaAno': linha.ano,
                    'provaSemestre': linha.semestre,
                    'numero': linha.QuestaoNumero,
                    'descricao': linha.QuestaoDescricao,
                    'assunto': linha.AssuntoNome,
                    'disciplina': linha.DisciplinaNome,
                    'complemento':{
                        'texto': linha.ComplementoTexto.split("<br/>"),
                        'imagem': linha.ComplementoImagem,
                        'referencia': linha.ComplementoReferencia
                    },
                    'alternativas':{}
                });
            }
            idxUltimoInserido = _objView[linha.DisciplinaNome].length-1;
            _objView[linha.DisciplinaNome][idxUltimoInserido].alternativas[linha.AlternativaOrdem] = {
                'descricao': linha.AlternativaDescricao,
                'ehCorreta': linha.AlternativaEhCorreta,
                'ordem': linha.AlternativaOrdem,
                'class': '',         //foi selecionado ? RED ou GREEN : VAZIO
                'desabilitado': '',  //Bloquear campo
                'selecionado': false //Esta foi a alternativa selecionada pelo usuário
            };
        }
    }
    return{
        getByMateria: function(materia){
            return materia in _objView ? _objView[materia] : [];
        },
        getQuestion: function(materia, idx){
            return materia in _objView ? idx in _objView[materia] ? _objView[materia][idx] : [] : [];
        },
        getTotalQuestions: function(materia){
            return materia in _objView ? _objView[materia].length : 0;
        },
        setQuestion: function(materia, idx, _newObjView){
            _objView[materia][idx] = _newObjView;
        }
    };
});

//Test service
services.factory("Customers",['$resource', function($resource){
    return $resource("http://www.w3schools.com/angular/customers_mysql.php",{}, {
        query: { method: 'GET' }
    });
}]);

services.factory("DisciplinaService",function(){
    return {
        all: function(){
            //TODO: chamada JSON para pegar as disciplinas por ordem alfabetica
            return [
                {'id': 3, 'nome': 'Biológia'},
                {'id': 4, 'nome': 'Física'},
                {'id': 7, 'nome': 'Geográfia'},
                {'id': 6, 'nome': 'História'},
                {'id': 2, 'nome': 'Matemática'},
                {'id': 1, 'nome': 'Português'},
                {'id': 5, 'nome': 'Química'}
            ];
        }
    }
});

services.factory("ProvaPorAnoService",function(){
    //TODO: chamada JSON para pegar as provas por ordem de ano e semestre decrescente
    return {
        all: function(){
            return [
                {'id': 1, 'ano':2015, 'semestre':2},
                {'id': 2, 'ano':2015, 'semestre':1},
                {'id': 3, 'ano':2014, 'semestre':2},
                {'id': 4, 'ano':2014, 'semestre':1},
                {'id': 5, 'ano':2013, 'semestre':2},
                {'id': 6, 'ano':2013, 'semestre':1}
            ];
        }
    }
});

services.factory("ProvaPorAssuntoService",function(){
    //TODO: chamada JSON para pegar os assuntos e as disciplinas por ordem alfabetica
    return {
        all: function(){
            return [
                {'id': 1, 'nome': 'Doenças Endêmicas', 'Disciplina_id': 3, 'Disciplina_nome': 'Biológia'},
                {'id': 2, 'nome': 'Ondulatória', 'Disciplina_id': 4, 'Disciplina_nome': 'Física'},
                {'id': 4, 'nome': 'Indústria e Agricultura', 'Disciplina_id': 7, 'Disciplina_nome': 'Geográfia'},
                {'id': 3, 'nome': 'Geografia Física', 'Disciplina_id': 7, 'Disciplina_nome': 'Geográfia'},
                {'id': 5, 'nome': 'População', 'Disciplina_id': 7, 'Disciplina_nome': 'Geográfia'},
                {'id': 6, 'nome': 'História do Brasil', 'Disciplina_id': 6, 'Disciplina_nome': 'História'},
                {'id': 7, 'nome': 'Divisibilidade', 'Disciplina_id': 2, 'Disciplina_nome': 'Matemática'},
                {'id': 8, 'nome': 'Mat. Básica', 'Disciplina_id': 2, 'Disciplina_nome': 'Matemática'},
                {'id': 11, 'nome': 'Análise Morfossintática', 'Disciplina_id': 1, 'Disciplina_nome': 'Português'},
                {'id': 9, 'nome': 'Interpretação de Texto', 'Disciplina_id': 1, 'Disciplina_nome': 'Português'},
                {'id': 10, 'nome': 'Semântica', 'Disciplina_id': 1, 'Disciplina_nome': 'Português'},
                {'id': 12, 'nome': 'Tabela Periódica', 'Disciplina_id': 5, 'Disciplina_nome': 'Química'}
            ];
        }
    }
});

services.factory('Chats', function() {
    // Might use a resource here that returns a JSON array

    // Some fake testing data
    var chats = [{
        id: 0,
        name: 'Ben Sparrow',
        lastText: 'You on your way?',
        face: 'https://pbs.twimg.com/profile_images/514549811765211136/9SgAuHeY.png'
    }, {
        id: 1,
        name: 'Max Lynx',
        lastText: 'Hey, it\'s me',
        face: 'https://avatars3.githubusercontent.com/u/11214?v=3&s=460'
    }, {
        id: 2,
        name: 'Adam Bradleyson',
        lastText: 'I should buy a boat',
        face: 'https://pbs.twimg.com/profile_images/479090794058379264/84TKj_qa.jpeg'
    }, {
        id: 3,
        name: 'Perry Governor',
        lastText: 'Look at my mukluks!',
        face: 'https://pbs.twimg.com/profile_images/598205061232103424/3j5HUXMY.png'
    }, {
        id: 4,
        name: 'Mike Harrington',
        lastText: 'This is wicked good ice cream.',
        face: 'https://pbs.twimg.com/profile_images/578237281384841216/R3ae1n61.png'
    }];

    return {
        all: function() {
            return chats;
        },
        remove: function(chat) {
            chats.splice(chats.indexOf(chat), 1);
        },
        get: function(chatId) {
            for (var i = 0; i < chats.length; i++) {
                if (chats[i].id === parseInt(chatId)) {
                    return chats[i];
                }
            }
            return null;
        }
    };
});

My problem is because this code run on PC (“ionic run -lab”) but not work into Device correctly.

Is it okay to create a global variable in ionic?
What better way to do this?

tk


#2

The problem was the parse int.