Json + Fragment + ListView

2 respostas
T

Ola galera, estou desenvolvendo um app e estou encontrando problemas ao tentar preencher uma ListView que encontra-se dentro de um Fragment a partir de um Json.

Alguém conseguiria me ajudar e ver onde estou errado.

Abaixo segue o código do meu Fragment

package br.com.tapanovisual.tvisual.fragments;

import android.app.ProgressDialog;

import android.os.AsyncTask;

import android.os.Bundle;

import android.support.annotation.Nullable;

import android.support.v4.app.Fragment;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ListView;

import android.widget.Toast;
import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;
import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;
import br.com.tapanovisual.tvisual.Principal;

import br.com.tapanovisual.tvisual.R;

import br.com.tapanovisual.tvisual.adapters.ReservasAdapter;

import br.com.tapanovisual.tvisual.listviews.objetos.Reservas;

// Created by thiago.c.melo on 17/01/2016.

public class FragmentFavoritos extends Fragment {

//Progress Dialog
private ProgressDialog pDialog;
//URL arquivo PHP
//private static String url = ("http://tapanovisual.esy.es/selectUltimasReservas.php");
//Node Nomes JSON
private static final String TAG_NOME = "nome";
//Criando JSONArray
JSONArray JsonArray = null;
ArrayList<HashMap<Integer, Reservas>> fixtureList;
ListView lv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//HashMap para ListView
    fixtureList = new ArrayList<HashMap<Integer, Reservas>>();
    View view = inflater.inflate(R.layout.fragment_favoritos, container, false);
    lv = (ListView) view.findViewById(R.id.fixture_list);
//Buscando Dados Bando de Dados
    new LoadFixture().execute();
return view;
}
class LoadFixture extends AsyncTask<String, String, String>{
@Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Carregando...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }
@Override
    protected String doInBackground(String... params) {
Reservas objReserva = new Reservas();
try {
            URL url = new URL("http://tapanovisual.esy.es/selectUltimasReservas.php");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.connect();
InputStream stream = conn.getInputStream();
            BufferedReader buffer = new BufferedReader(new InputStreamReader(stream));
            StringBuffer sb = new StringBuffer();
String line = "";
            while ((line = buffer.readLine()) != null){
                sb.append(line);
            }
String finalJson = sb.toString();
            JSONObject parentObject = new JSONObject(finalJson);
            JSONArray parentArray = parentObject.getJSONArray("estabelecimentos");
for (int i = 0; i < parentArray.length(); i++){
JSONObject c = parentArray.getJSONObject(i);
                    String nome = c.getString("nome");
HashMap<Integer, Reservas>map = new HashMap<Integer, Reservas>();
                    objReserva.setNome(nome);
map.put(i, objReserva);
                    fixtureList.add(map);
}
} catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
@Override
    protected void onPostExecute(String s) {
        pDialog.dismiss();
lv.setAdapter(new ReservasAdapter(getActivity(), fixtureList));
    }
}

}

Abaixo o código Item_reserva

<?xml version="1.0" encoding="utf-8"?>

<TextView
            android:text="Instituto de Beleza Natural"
            android:id="@+id/text_nome_item_reserva"
            android:layout_marginLeft="70dp"
            android:layout_marginTop="10dp"
            android:textSize="16sp"
            android:textColor="@color/texto_principal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

XML do Fragment

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
    android:background="@color/amarelo_escuro"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:id="@+id/view">
<ImageButton
        android:background="@drawable/seta_esquerda"
        android:layout_width="25dp"
        android:layout_height="25dp"/>
<TextView
        android:text="Últimas Reservas"
        android:textColor="@color/branco"
        android:textSize="15dp"
        android:layout_marginLeft="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</android.support.v7.widget.Toolbar>
<RelativeLayout
        android:layout_marginTop="50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
<ListView
            android:id="@+id/fixture_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>
</RelativeLayout>

Código do Reserva

package br.com.tapanovisual.tvisual.listviews.objetos;

public class Reservas {

private String nome;
public String getNome(int position) {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}

}

Adapter

package br.com.tapanovisual.tvisual.adapters;

import android.content.Context;

import android.support.v7.widget.RecyclerView;

import android.support.v7.widget.RecyclerView.ViewHolder;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.List;

import br.com.tapanovisual.tvisual.R;

import br.com.tapanovisual.tvisual.listviews.objetos.Reservas;

public class ReservasAdapter extends BaseAdapter {

private ArrayList listData;
private LayoutInflater layoutInflater;
public ReservasAdapter(Context context, ArrayList listData){
    this.listData = listData;
    layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
    return listData.size();
}
@Override
public Object getItem(int position) {
    return listData.get(position);
}
@Override
public long getItemId(int position) {
    return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.item_reserva, null);
        holder = new ViewHolder();
        holder.nome = (TextView) convertView.findViewById(R.id.text_nome_item_reserva);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
Reservas reservas = (Reservas) listData.get(position);
    //holder.nome.setText(reservas.getNome());
return convertView;
}
static class ViewHolder {
    TextView nome;
}

}

Está sendo apresentado erro na parte abaixo: O Aplicativo fecha sozinho!

Reservas reservas = (Reservas) listData.get(position);
holder.nome.setText(reservas.getNome());

Log de Erro

03-14 18:36:34.015 13688-13688/br.com.tapanovisual.tvisual E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 43

03-14 18:36:34.045 13688-13688/br.com.tapanovisual.tvisual E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 47

03-14 18:36:34.055 13688-13688/br.com.tapanovisual.tvisual E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 48

03-14 18:36:34.055 13688-13688/br.com.tapanovisual.tvisual E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 48

03-14 18:36:34.055 13688-13688/br.com.tapanovisual.tvisual E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 48

03-14 18:36:34.095 13688-13688/br.com.tapanovisual.tvisual E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 49

03-14 18:38:59.005 13688-13688/br.com.tapanovisual.tvisual E/AndroidRuntime: FATAL EXCEPTION: main

Process: br.com.tapanovisual.tvisual, PID: 13688

java.lang.ClassCastException: java.util.HashMap cannot be cast to br.com.tapanovisual.tvisual.listviews.objetos.Reservas

at br.com.tapanovisual.tvisual.adapters.ReservasAdapter.getView(ReservasAdapter.java:64)

at android.widget.AbsListView.obtainView(AbsListView.java:2263)

at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)

at android.widget.ListView.onMeasure(ListView.java:1175)

at android.view.View.measure(View.java:16615)

at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689)

at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473)

at android.view.View.measure(View.java:16615)

at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)

at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)

at android.view.View.measure(View.java:16615)

at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1489)

at android.view.View.measure(View.java:16615)

at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)

at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)

at android.view.View.measure(View.java:16615)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)

at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:610)

at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:78)

at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1132)

at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:675)

at android.view.View.measure(View.java:16615)

at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940)

at android.view.View.measure(View.java:16615)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)

at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)

at android.view.View.measure(View.java:16615)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)

at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)

at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)

at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)

at android.view.View.measure(View.java:16615)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)

at android.view.View.measure(View.java:16615)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)

at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)

at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)

at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)

at android.view.View.measure(View.java:16615)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5147)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)

at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)

at android.view.View.measure(View.java:16615)

at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2065)

at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1192)

at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1401)

at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1079)

at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5948)

at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)

at android.view.Choreographer.doCallbacks(Choreographer.java:574)

at android.view.Choreographer.doFrame(Choreographer.java:544)

at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)

at android.os.Handler.handleCallback(Handler.java:733)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper

Se alguém puder me ajudar e me dizer onde estou errando.
Muito obrigado!!!

2 Respostas

F

Você tá fazendo um ArrayList de um HashMap?! Não é mais fácil usar somente um HashMap?

“ThiagoCMelo:

public class FragmentFavoritos extends Fragment  {
     //...
    ArrayList<HashMap<Integer, Reservas>> fixtureList;

}

Quando você faz:

Você está pegando um HashMap e não uma Reservas, causando o seu ClassCastExeption que até diz os tipos envolvidos:

java.util.HashMap cannot be cast to br.com.tapanovisual.tvisual.listviews.objetos.Reservas

Sugestão: tente trabalhar somente com o HashMap em vez de um ArrayList<HashMap<..,..>>.

T

Valew Felipe. Vou tentar e dou um retorno se conseguir.
Muito obrigado pela resposta.

Criado 14 de março de 2016
Ultima resposta 14 de mar. de 2016
Respostas 2
Participantes 2