Android Studio - Popular uma ListView a partir de um JSON

  • Respostas:0
Fábio de Carvalho
  • Posts no fórum: 1

25/10/2016, 19:14:03 via Web

Olá, sou novo como desenvolvedor Android e preciso pegar um JSON e listar em uma ListView em meu app, peguei como exemplo este projeto: learn2crack. com/2013/11/listview-from-json-example . html

Baixei o projeto e funciona perfeitamente, o JSON(Encurtei para melhor visualização) que vem com o projeto é:

{ "android": [ { "ver": "1.5", "name": "Cupcake", "api": "API level 3" }] }

E na ListView, cada item mostra a Versão(ver), Nome(name) e API (api); Até aí beleza... mas quando eu mudo o URL para a do meu projeto, que no caso é "localhost: 4528/api/RestRenda/21"(tirei o HTTP, pois o fórum não deixa postar links), que retorna o seguinte JSON(resumido):

[{"Valor":1250.0000,"Descricao":"Salário do trabalho na empresa X","Data":"2015-11-23T15:34:00","IDCategoriaRenda":21,"IDUsuario":21}]

E modifico a Classe que era:

public class AndroidVersion {

    private String ver;
    private String name;
    private String api;

    public String getVer() {
        return ver;
    }

    public String getName() {
        return name;
    }

    public String getApi() {
        return api;
    }
}

Para:

public class AndroidVersion{

    private String Valor;
    private String Descricao;
    private String Data;
    private String IDCategoriaRenda;


    public String getValor() {
        return Valor;
    }

    public String getDescricao() {
        return Descricao;
    }

    public String getData() {
        return Data;
    }

    public String getIdCategoriaRenda() {
        return IDCategoriaRenda;
    }

}

E a MainActivity que era assim:

public class MainActivity extends AppCompatActivity implements LoadJSONTask.Listener, AdapterView.OnItemClickListener {

    private ListView mListView;

    public static final String URL = "https ://api.learn2crack.com/android/jsonandroid/";

    private List<HashMap<String, String>> mAndroidMapList = new ArrayList<>();

    private static final String KEY_VER = "ver";
    private static final String KEY_NAME = "name";
    private static final String KEY_API = "api";

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

        mListView = (ListView) findViewById(R.id.list_view);
        mListView.setOnItemClickListener(this);
        new LoadJSONTask(this).execute(URL);
    }

    @Override
    public void onLoaded(List<AndroidVersion> androidList) {

        for (AndroidVersion android : androidList) {

            HashMap<String, String> map = new HashMap<>();

            map.put(KEY_VER, android.getVer());
            map.put(KEY_NAME, android.getName());
            map.put(KEY_API, android.getApi());

            mAndroidMapList.add(map);
        }

        loadListView();
    }

    @Override
    public void onError() {

        Toast.makeText(this, "Error !", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        Toast.makeText(this, mAndroidMapList.get(i).get(KEY_NAME),Toast.LENGTH_LONG).show();
    }

    private void loadListView() {

        ListAdapter adapter = new SimpleAdapter(MainActivity.this, mAndroidMapList, R.layout.list_item,
                new String[] { KEY_VER, KEY_NAME, KEY_API },
                new int[] { R.id.version,R.id.name, R.id.api });

        mListView.setAdapter(adapter);

    }
}

Para assim:

public class MainActivity extends AppCompatActivity implements LoadJSONTask.Listener, AdapterView.OnItemClickListener {

    private ListView mListView;

    public static final String URL = "http ://localhost:4528/api/RestRenda/21";

    private List<HashMap<String, String>> mAndroidMapList = new ArrayList<>();

    private static final String KEY_NAME = "Descricao";

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

        mListView = (ListView) findViewById(R.id.list_view);
        mListView.setOnItemClickListener(this);
        new LoadJSONTask(this).execute(URL);
    }

    @Override
    public void onLoaded(List<AndroidVersion> androidList) {

        for (AndroidVersion android : androidList) {

            HashMap<String, String> map = new HashMap<>();

            map.put(KEY_NAME, android.getDescricao());

            mAndroidMapList.add(map);
        }

        loadListView();
    }

    @Override
    public void onError() {

        Toast.makeText(this, "Error !", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        Toast.makeText(this, mAndroidMapList.get(i).get(KEY_NAME),Toast.LENGTH_LONG).show();
    }

    private void loadListView() {

        ListAdapter adapter = new SimpleAdapter(MainActivity.this, mAndroidMapList, R.layout.list_item,
                new String[] { KEY_NAME},
                new int[] { R.id.name});

        mListView.setAdapter(adapter);

    }
}

Me retorna um erro, no exemplo eu estou tentando puxar só o campo Descricao como exemplo, alguma dica?

Responder