GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Dúvida ListView

android
Tags: #<Tag:0x00007fbf1c50f770>

#1

Tenho o seguinte código abaixo aonde estou com dúvida como eu faço para exibir a lista na tela, já tentei de diversas formas e já fiz vários exemplos da internet não consegui uma solução correta pro meu problema.

O Erro é:

Caused by: java.lang.ClassCastException: android.support.constraint.ConstraintLayout cannot be cast to android.widget.TextView

Meu XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="br.com.escconsultoria.escoficina.view.AcompanharOrdemServicoActivity">

<ListView
android:id="@+id/listViewAcompanharOrdemServico"
android:layout_width="368dp"
android:layout_height="495dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp" />

Minha Classe:

	public class AcompanharOrdemServicoActivity extends Activity {

	private ListView listViewAcompanharOrdemServico;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_acompanhar_ordem_servico);

		listViewAcompanharOrdemServico = findViewById(R.id.listViewAcompanharOrdemServico);

		String cpfCliente = null;
		Bundle extras = getIntent().getExtras();
		if (extras != null) {
			cpfCliente = extras.getString("cpfCliente");
		}

		new CarregaAcompanharOrdemServicoSaidaDTOJsonAsyncTask().execute("https://escoficinawebservice.herokuapp.com/acompanharOrdemServico/" + cpfCliente);
	}

		/*@Override
		protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);

		AcompanharOrdemServico acompanharOrdemServico = (AcompanharOrdemServico) l.getAdapter().getItem(position);

		Intent it = new Intent(Intent.ACTION_VIEW, Uri.parse(acompanharOrdemServico.url));
		startActivity(it);
		}*/

	class CarregaAcompanharOrdemServicoSaidaDTOJsonAsyncTask extends AsyncTask<String, Void, List<AcompanharOrdemServicoSaidaDTO>> {

		@Override
		protected void onPreExecute() {
			super.onPreExecute();

			Context context = getApplicationContext();

			String message = "Aguarde... Verificando CPF.";
			int time = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, message, time);
			toast.show();
		}

		@Override
		protected List<AcompanharOrdemServicoSaidaDTO> doInBackground(String... params) {
			String urlString = params[0];

			HttpClient httpClient = new DefaultHttpClient();
			HttpGet httpGet = new HttpGet(urlString);

			List<AcompanharOrdemServicoSaidaDTO> listaAcompanharOrdemServicoSaidaDTO = null;

			try {
				HttpResponse response = httpClient.execute(httpGet);

				HttpEntity httpEntity = response.getEntity();

				if (httpEntity != null) {
					InputStream inputStream = httpEntity.getContent();

					String json = toString(inputStream);
					inputStream.close();

					listaAcompanharOrdemServicoSaidaDTO = getAcompanharOrdemServico(json);
				}
			} catch (Exception e) {
				Context context = getApplicationContext();
				int time = Toast.LENGTH_SHORT;

				String message = "Erro: " + e.getMessage();

				Toast toast = Toast.makeText(context, message, time);
				toast.show();

				return null;
			}

			return listaAcompanharOrdemServicoSaidaDTO;
		}

		private List<AcompanharOrdemServicoSaidaDTO> getAcompanharOrdemServico(String jsonString) {

			List<AcompanharOrdemServicoSaidaDTO> listaAcompanharOrdemServicoSaidaDTO = new ArrayList<>();
			AcompanharOrdemServicoSaidaDTO acompanharOrdemServicoSaidaDTO = new AcompanharOrdemServicoSaidaDTO();

			List<AcompanharOrdemServicoModel> listaAcompanharOrdemServicoModel = new ArrayList<>();

			try {
				JSONObject jsonObjectConvertString = new JSONObject(jsonString);
				JSONObject jsonObjectEntity = jsonObjectConvertString.getJSONObject("entity");
				JSONArray jsonArrayAcompanharOrdemServicoModel = jsonObjectEntity.getJSONArray("listaAcompanharOrdemServicoModel");

				JSONObject jsonObjectAcompanharOrdemServicoModel;

				for (int i = 0; i < jsonArrayAcompanharOrdemServicoModel.length(); i++) {
					jsonObjectAcompanharOrdemServicoModel = new JSONObject(jsonArrayAcompanharOrdemServicoModel.getString(i));

					AcompanharOrdemServicoModel acompanharOrdemServicoModel = new AcompanharOrdemServicoModel();
					acompanharOrdemServicoModel.setCodigoOrdemServico(jsonObjectAcompanharOrdemServicoModel.getInt("codigoOrdemServico"));

					Long dataCadastroAcompanharOrdemServico = jsonObjectAcompanharOrdemServicoModel.getLong("dataCadastroAcompanharOrdermServico");
					acompanharOrdemServicoModel.setDataCadastroAcompanharOrdermServico(new Date(dataCadastroAcompanharOrdemServico));

					listaAcompanharOrdemServicoModel.add(acompanharOrdemServicoModel);
				}

				acompanharOrdemServicoSaidaDTO.setListaAcompanharOrdemServicoModel(listaAcompanharOrdemServicoModel);


				listaAcompanharOrdemServicoSaidaDTO.add(acompanharOrdemServicoSaidaDTO);

			} catch (JSONException e) {
				Context context = getApplicationContext();
				int time = Toast.LENGTH_SHORT;

				String message = "Erro: " + e.getMessage();

				Toast toast = Toast.makeText(context, message, time);
				toast.show();

				return null;
			}

			return listaAcompanharOrdemServicoSaidaDTO;
		}

		@Override
		protected void onPostExecute(List<AcompanharOrdemServicoSaidaDTO> listaAcompanharOrdemServicoSaidaDTO) {
			super.onPostExecute(listaAcompanharOrdemServicoSaidaDTO);


			if (listaAcompanharOrdemServicoSaidaDTO != null) {

				ArrayAdapter<AcompanharOrdemServicoSaidaDTO> adapter = new ArrayAdapter<AcompanharOrdemServicoSaidaDTO>(AcompanharOrdemServicoActivity.this,
						R.layout.activity_acompanhar_ordem_servico, listaAcompanharOrdemServicoSaidaDTO);

				listViewAcompanharOrdemServico.setAdapter(adapter);

			} else {
				AlertDialog.Builder builder = new AlertDialog.Builder(
						AcompanharOrdemServicoActivity.this).setTitle("Atenção")
						.setMessage("Não foi possivel acessar essas informções...")
						.setPositiveButton("OK", null);
				builder.create().show();
			}
		}

		private String toString(InputStream is) throws IOException {

			byte[] bytes = new byte[1024];
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			int lidos;
			while ((lidos = is.read(bytes)) > 0) {
				baos.write(bytes, 0, lidos);
			}
			return new String(baos.toByteArray());
		}
	}
}

#2

Bom dia. Essa exceção diz que vc está tentando fazer um casting de ConstraintLayout para TextView. Esse erro geralmente aparece quando vc procura uma view usando findViewById.

Esse layout aqui

R.layout.activity_acompanhar_ordem_servico

Ele é um layout com textviews que serão preenchidos com os dados de AcompanharOrdemServicoSaidaDTO certo ?

Se a resposta for sim, como vc faz para preencher os campos desse layout ? Para criar uma lista, feralmente cria-se uma ArrayAdapter especfico para cada layout e ainda utiliza-se o padrão ViewHolder, para economizar consumo de memória. Vc conhece essa solução ?

O que está claro é que o problema é de casting, só não tenho certeza de onde no seu código. Por exemplo
essa linha do seu código

listViewAcompanharOrdemServico = findViewById(R.id.listViewAcompanharOrdemServico);

A própria IDE reclama que não tem casting, pois findViewById retornar uma View não uma ListView.


#3

O meu layout só tem isso, que é o que estou dando findViewById só o ListView dentro. Mas a IDE não reclama de Casting somente na hora de fazer o processo mesmo. Eu tenho um exemplo parecido que eu fiz e não entendi o porque esse meu não funciona. Teria um exemplo como está falando pra mim tentar fazer? Eu não estou definindo em nenhum lugar um TextView é uma coisa que ja tentei fazer mais ou menos em exemplos na internet igual mas também não consegui deu outros erros.


#4

Esse link explica como criar uma ListView cujos itens tem um layout mais complexo. Geralmente os itens que compõe um listview não mudam de layout, só o conteúdo. Para aproveitar o mesmo layout para todos os itens da lista usamos o padrão de projeto ViewHolder: http://blog.alura.com.br/utilizando-o-padrao-viewholder/. Usando-o podemos construir listas com muitos itens e mandar uma navegação agradável ao usuário.

Faça um projeto a parte seguindo o tutorial do link que te passei, acredito que vai te ajudar a entender.

Porém volto a dizer, em algum lugar no seu código vc está tentando pegar uma View do tipo ConstraintLayout e colocar num TextView, porque é isso que a exception está dizendo.