Android 2.0, 4.0, 4.1

Bom dia,

Minha dúvida é a seguinte… Desenvolvi uma aplicação em android, na versão 2.0
Ao tentar rodar ela nas versões 4.0 e 4.1 a aplicação não funciona… acredito que o problema seja na webservice…
Alguém tem um conselho ou idéia do pode estar acontecendo?

Grato

Assim, sem nenhuma mensagem de erro fica complicado…
Você tentou debugar com simulador ?

Sim, mas na versão 2.1… será que aí é que está o problema?.. preciso tentar debugar num simulador 4.0?

[quote=Andre_Lutz]Sim, mas na versão 2.1… será que aí é que está o problema?.. preciso tentar debugar num simulador 4.0?
[/quote]
isso… tenta debugar num simulador 4.0!

Posta o que está aparecendo no seu logcat na hora em que acontece o crash da sua aplicação.

Pode ser problema de target.

Veja se a API minima é do 2.X(7-10) que vc esta usando e a target a mais avançada onde pretende rodar (4.1 é 16-17)

edit: esquece, viajei, nem instalaria ><

O problema deve ser o acesso à net, nas versões mais recentes do android ele checa se está fazendo a conexão na UI thread e dá um erro. Para resolver coloca o acesso numa outra thread (ou asyncTask)

Ainda não consegui identificar o erro…
Rodei a aplicação em um emulador da versão 4.2… qdo clico em um botão que deve validar uma chave e senha de acesso, no meu LogCat aparece a seguinte mensagem…

Tag - "Erro no acesso webservice"
Text - “android.os.NetworkOnMainThreadException”

Alguém já viu esse erro?

Você está tentando acessar o WebService da Thread principal… o que não é mais permitido!
Procure no fórum por AsyncTask, deve resolver seu problema.

Desculpe usar o mesmo post para minha duvida, mais estou tendo o mesmo problema que o colega Andre_Lutz, e acredito que com o AsyncTask consiga resolver meu problema, mais eu não consigo fazer o método que estou querendo rodar no AsyncTask, alguém pode por favor me ajudar o que esta errado no código abaixo.

Este roda normal na versão 2.3

[code]private ArrayList GetSearchResultsTelefone() {
ArrayList results = new ArrayList();

	DSRESTConnection conn = gc.getConnection();
	TServerMethods1 serv = new TServerMethods1(conn);
	TDataSet ds;
	// ---------------------------------------
	try {
		ds = serv.ConsultaTelefoneCliente(AZClienteActivity.login
				.toString().trim());
		while (ds.next()) {
			ListaTelefoneCliente sr2 = new ListaTelefoneCliente();

			String concTelefone = ds.getValue("TELEFONE_FORMATADO")
					.GetAsString();
			String concLocal = ds.getValue("LOCAL").GetAsString();

			sr2.setTelefoneformatado(concTelefone);
			sr2.setLocal(concLocal);
			results.add(sr2);
		}

	} catch (Exception e) {
		e.printStackTrace();
	}
	return results;
}[/code]

Mais não roda na versão 4.0

Se eu colocar este codigo aqui

// captura a versão do android int SDK_INT = android.os.Build.VERSION.SDK_INT; // somente executar este código na versão android 4.0 acima // 14 adiante é da versão 4.0 if (SDK_INT > 14) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build(); StrictMode.setThreadPolicy(policy); }
No oncreate ai funciona na versão 4.0, mais eu não queria usar este código. (Pode ser que se o André quiser talvez resolva o problema dele, mais acho que melhor usar o AsyncTask por isso to querendo mudar o método)

Bom ai tentei mudar o método para usar com AsyncTask só que não funciona, talvez pelo fato de estar errado a forma que tentei fazer, executa, mais não traz o resultado

Vejam

[code]private ArrayList GetSearchResultsTelefone() {
final ArrayList results = new ArrayList();

	DSRESTConnection conn = gc.getConnection();
	final TServerMethods1 serv = new TServerMethods1(conn);

	new AsyncTask<Void, Void, Void>() {

		@Override
		protected Void doInBackground(Void... params) {
			try {

				TDataSet ds;

				ds = serv.ConsultaTelefoneCliente(AZClienteActivity.login
						.toString().trim());
				while (ds.next()) {
					ListaTelefoneCliente sr2 = new ListaTelefoneCliente();

					String concTelefone = ds.getValue("TELEFONE_FORMATADO")
							.GetAsString();
					String concLocal = ds.getValue("LOCAL").GetAsString();

					sr2.setTelefoneformatado(concTelefone);
					sr2.setLocal(concLocal);
					results.add(sr2);
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
			return null;
		}
	}.execute();
	return results;
}[/code]

Acho que é só erro de lógica no result, mais não conso saber a onde esta o problema.

Obrigado.

Tem alguma ListView recebendo a sr2??
Algum componente da tela está sendo alterado durante esse método?? Se sim, tem que colocar dentro do método OnPostExecute.

[quote=jhony_ld]O que é o seu “results”?? é uma ListView ou apenas uma List?
[/quote]Olá jhony_ld, obrigado por responder

Então, este results é o resultado dos dados que vem de uma tabela, que busco através de um webservice

Por exemplo:

tenho uma tabela TELEFONES
e tenho 3 telefones cadastrados

então o result traz no listview os telefones que vem la do banco de dados.

Obrigado.

Então está setando esse listview dentro do DoInBackground correto? se sim, essa parte terá que ser feita no OnPostExecute.

Então está setando esse listview dentro do DoInBackground correto? se sim, essa parte terá que ser feita no OnPostExecute.[/quote]Obrigado, mais sou muito iniciante em java, e não estou sabendo aplicar no método aqui

[code]private ArrayList GetSearchResultsTelefone() {
final ArrayList results = new ArrayList();

	DSRESTConnection conn = gc.getConnection();
	final TServerMethods1 serv = new TServerMethods1(conn);

	new AsyncTask<Void, Void, Void>() {

		@Override
		protected Void doInBackground(Void... params) {
			try {

				TDataSet ds;

				ds = serv.ConsultaTelefoneCliente(AZClienteActivity.login
						.toString().trim());
				while (ds.next()) {
					ListaTelefoneCliente sr2 = new ListaTelefoneCliente();

					String concTelefone = ds.getValue("TELEFONE_FORMATADO")
							.GetAsString();
					String concLocal = ds.getValue("LOCAL").GetAsString();

					sr2.setTelefoneformatado(concTelefone);
					sr2.setLocal(concLocal);
					results.add(sr2);
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
			return null;
		}

		@Override
		protected void onPostExecute(Void res) {				
				return;		
		}
	}.execute();
	return results;
}

[/code]

Estou tendo muita dificuldade em fazer isso corretamente, se puder me ajudar eu agradeço.

Então, quando passo este método no debbug linha a linha

[code]private ArrayList GetSearchResultsTelefone() {
final ArrayList results = new ArrayList();

    DSRESTConnection conn = gc.getConnection();  
    final TServerMethods1 serv = new TServerMethods1(conn);  

    new AsyncTask<Void, Void, Void>() {  

        @Override  
        protected Void doInBackground(Void... params) {  
            try {  

                TDataSet ds;  

                ds = serv.ConsultaTelefoneCliente(AZClienteActivity.login  
                        .toString().trim());  
                while (ds.next()) {  
                    ListaTelefoneCliente sr2 = new ListaTelefoneCliente();  

                    String concTelefone = ds.getValue("TELEFONE_FORMATADO")  
                            .GetAsString();  
                    String concLocal = ds.getValue("LOCAL").GetAsString();  

                    sr2.setTelefoneformatado(concTelefone);  
                    sr2.setLocal(concLocal);  
                    results.add(sr2);  
                }  

            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            return null;  
      
        }
        @Override  
        protected void onPostExecute(Void res) {                  
                return;       
        }
        
    }.execute();

    //Log.i("AZCliente", "Passou aqui");  
    return results;  
}}[/code]

Aparece na listview o resultado, agora quando não esta no modo debbug não mostra os telefones no listview.

Estou chamando assim no onCreate

ArrayList<ListaTelefoneCliente> searchResultsTelefone = GetSearchResultsTelefone(); final ListView lv2 = (ListView) findViewById(R.id.ListViewInformacoesTelefone); lv2.setAdapter(new TelefoneClienteBaseAdapter(this, searchResultsTelefone));

Não mostra nada de anormal no LogCat.

A imagem do debbug

Obrigado