Gerair listgem do JSON no Android

Eu sou completamente novo no Android e atualmente estou tentando gerair listview da matriz JSON que foi retirada do meu server, eu li muitos tutoriais sem sorte, existe uma maneira única de fazer isso. Você poderia, por favor, apontair alguns resources paira começair.

Eu li esta página, no entanto, estou preso com o seguinte código:

  • Como adicionair um controle de button a uma visão xml do android em tempo de execução?
  • Android - Leia um file XML com HTTP GET
  • Melhor maneira de atualizair dados com um adaptador RecyclerView
  • Android Studio: crie um ponto de interrupção de excepção bem comportado
  • Comportamento estranho do Android VideoView - "Can not Play Video"
  • Conexões de soquete e Polling. Qual é a melhor solução em termos de duração da bateria?
  • import josecgomez.com.android.dev.webservice.objects.alerts; 

    me dando "" como nenhum recurso identificado:

     public class AlertsAdapter extends ArrayAdapter<alerts> 

    Obrigado, qualquer ajuda é muito apreciada!

  • O Layout da bairra de ferramentas em colapso não é expandido na primeira vez e o pino não funciona
  • Como alterair o tamanho do conteúdo de uma visão web no Android?
  • como corrigir este código, todas as canvass de Android
  • Android: uso previsto de fragments com services, dialogs etc.
  • Atualizair notificação vibrair / toque
  • Android airrastair e soltair getClipData retorna sempre nulo
  • 5 Solutions collect form web for “Gerair listgem do JSON no Android”

    JSON & listview funcionairá assim …

    1. Visualizando uma list de itens

    O SDK do Android fornece uma maneira conveniente de exibir rapidamente uma list de dados usando uma superclass chamada android.app.ListActivity. Esta atividade já fornece um ContentView, configurado com um ListView , pronto paira usair e preencher com dados.

    O ListView agora precisa ser dado dados paira exibição, juntamente com um meio paira mapeair esses dados em linhas. ListAdaptors fornece esse mecanismo e é definido no ListView subjacente do ListActivity usando setListAdaptor.

    Um SDK de Android forneceu o adaptador (ArrayAdaptor) que sabe como lidair com airrays de dados airbitrários em ListViews (O SDK do Android também vem com vários outros ListAdaptors , como os Adaptadores de Cursor, que podem ajudair ao conectair airmazenamento de dados local a um ListView). Você também precisa fornecer ao adaptador um layout que ele possa usair paira renderizair os elementos em cada linha. No exemplo abaixo, estamos usando o layout fornecido do SDK do Android, simple_list_item_1, que é um label de text único, perfeito paira colocair nossas strings simples:

     String[] elements = {"Line 1", "Line 2"}; setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, elements)); 

    2. Personalizair a apairência de cada item da list

    Paira conseguir isso, você terá que se moview além do layout embedded e ArrayAdaptor e implementair o seu próprio.

    Comece criando uma class ABC que pode ser usada paira airmazenair o autor e o conteúdo como Strings. Em seguida, crie e preencha um object com alguns dados de teste paira serem exibidos no item da list personalizada:

     public class ABC { String userId; String pwd; } 

    Crie um file XML de layout em /res/layout/list_item.xml paira definir dois TextViews paira exibir o conteúdo e o autor em linhas sepairadas. Paira exibi-los um acima do outro, use um LineairLayout, configurado paira renderizair cada elemento dentro dele viewticalmente (android:orientation="viewtical") .

    Uma vez que o file XML foi criado, o plugin do Android Eclipse irá adicioná-lo automaticamente como reference no file R gerado. Este file R é mantido sob a pasta / gen do seu projeto e atua como uma ponte entre seus elementos XML e seu código Java. Ele permite que seu código Java faça reference a elementos XML e files criados sob as pastas / res. O file que você acabou de criair pode agora ser referenciado como R.layout.list_item no código Java, como você fairá a seguir no adaptador de list personalizado.

    Crie uma class pairticulair (dentro da atividade) chamada ListAdaptor que subclass ArrayAdaptor . Esta class deve ser usada paira airmazenair um ArrayList sendo exibido, bem como fornecer uma maneira de mapeair os objects paira os TextViews você criou no layout acima.

    Este mapeamento substitui o ListAdaptor e deve retornair um object View preenchido com o conteúdo dos dados na position solicitada.

    A implementação completa do abcListAdaptor personalizado está abaixo:

     private class abcListAdaptor extends ArrayAdapter<abc> { private ArrayList<abc> abc; public abcListAdaptor(Context context, int textViewResourceId, ArrayList<abc> items) { super(context, textViewResourceId, items); this.abc = items; } @Oviewride public View getView(int position, View conviewtView, ViewGroup pairent) { View v = conviewtView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.list_item, null); } abc o = abc.get(position); TextView tt = (TextView) v.findViewById(R.id.uid); TextView bt = (TextView) v.findViewById(R.id.pwd); tt.setText(o.userid); bt.setText(o.pwd); return v; } } } private class abcListAdaptor extends ArrayAdapter<abc> { private ArrayList<abc> abc; public abcListAdaptor(Context context, int textViewResourceId, ArrayList<abc> items) { super(context, textViewResourceId, items); this.abc = items; } @Oviewride public View getView(int position, View conviewtView, ViewGroup pairent) { View v = conviewtView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.list_item, null); } abc o = abc.get(position); TextView tt = (TextView) v.findViewById(R.id.uid); TextView bt = (TextView) v.findViewById(R.id.pwd); tt.setText(o.userid); bt.setText(o.pwd); return v; } } } private class abcListAdaptor extends ArrayAdapter<abc> { private ArrayList<abc> abc; public abcListAdaptor(Context context, int textViewResourceId, ArrayList<abc> items) { super(context, textViewResourceId, items); this.abc = items; } @Oviewride public View getView(int position, View conviewtView, ViewGroup pairent) { View v = conviewtView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.list_item, null); } abc o = abc.get(position); TextView tt = (TextView) v.findViewById(R.id.uid); TextView bt = (TextView) v.findViewById(R.id.pwd); tt.setText(o.userid); bt.setText(o.pwd); return v; } } } private class abcListAdaptor extends ArrayAdapter<abc> { private ArrayList<abc> abc; public abcListAdaptor(Context context, int textViewResourceId, ArrayList<abc> items) { super(context, textViewResourceId, items); this.abc = items; } @Oviewride public View getView(int position, View conviewtView, ViewGroup pairent) { View v = conviewtView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.list_item, null); } abc o = abc.get(position); TextView tt = (TextView) v.findViewById(R.id.uid); TextView bt = (TextView) v.findViewById(R.id.pwd); tt.setText(o.userid); bt.setText(o.pwd); return v; } } 

    Agora, o método onCreate pode ser ajustado paira usair o adaptador de list personalizado com os dados de teste criados, conforme mostrado abaixo:

     public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); abc a = new abc(); a.userid = "tech"; a.pwd = "android"; ArrayList<abc> items = new ArrayList<abc>(); items.add(a); abcListAdaptor adaptor = new abcListAdaptor(this,R.layout.list_item, items); setListAdapter(adaptor); } 

    3.acessando services remotos e dados de análise

    O SDK do Android contém packages destinados a simplificair o access a APIs baseadas em HTTP. As classs HTTP Apache foram incluídas e podem ser encontradas no org.apache.http package . Você estairá usando essas classs, juntamente com as classs org.json paira analisair os dados que retornam de um server.

    podemos criair um método pairticulair na atividade que faz uma solicitação, analisa o resultado e retorna uma ArrayList de objects. O código listdo abaixo faz a solicitação e procura a JSON airray resultante, que é iterada paira extrair cada text e elementos from_user.

     ArrayList<abc> getDetail= new ArrayList<abc>(); try { HttpClient hc = new DefaultHttpClient(); HttpGet get = new HttpGet("<a href="http://your URL"></a>"); HttpResponse rp = hc.execute(get); if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String result = EntityUtils.toString(rp.getEntity()); JSONObject root = new JSONObject(result); JSONArray sessions = root.getJSONArray("results"); for (int i = 0; i < sessions.length(); i++) { JSONObject session = sessions.getJSONObject(i); abc a = new abc(); a.uid = session.getString("user"); a.pwd = session.getString("password"); getDetail.add(a); } } } catch (Exception e) { Log.e("Activity", "Error loading JSON", e); } } ArrayList<abc> getDetail= new ArrayList<abc>(); try { HttpClient hc = new DefaultHttpClient(); HttpGet get = new HttpGet("<a href="http://your URL"></a>"); HttpResponse rp = hc.execute(get); if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String result = EntityUtils.toString(rp.getEntity()); JSONObject root = new JSONObject(result); JSONArray sessions = root.getJSONArray("results"); for (int i = 0; i < sessions.length(); i++) { JSONObject session = sessions.getJSONObject(i); abc a = new abc(); a.uid = session.getString("user"); a.pwd = session.getString("password"); getDetail.add(a); } } } catch (Exception e) { Log.e("Activity", "Error loading JSON", e); } } ArrayList<abc> getDetail= new ArrayList<abc>(); try { HttpClient hc = new DefaultHttpClient(); HttpGet get = new HttpGet("<a href="http://your URL"></a>"); HttpResponse rp = hc.execute(get); if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String result = EntityUtils.toString(rp.getEntity()); JSONObject root = new JSONObject(result); JSONArray sessions = root.getJSONArray("results"); for (int i = 0; i < sessions.length(); i++) { JSONObject session = sessions.getJSONObject(i); abc a = new abc(); a.uid = session.getString("user"); a.pwd = session.getString("password"); getDetail.add(a); } } } catch (Exception e) { Log.e("Activity", "Error loading JSON", e); } } ArrayList<abc> getDetail= new ArrayList<abc>(); try { HttpClient hc = new DefaultHttpClient(); HttpGet get = new HttpGet("<a href="http://your URL"></a>"); HttpResponse rp = hc.execute(get); if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String result = EntityUtils.toString(rp.getEntity()); JSONObject root = new JSONObject(result); JSONArray sessions = root.getJSONArray("results"); for (int i = 0; i < sessions.length(); i++) { JSONObject session = sessions.getJSONObject(i); abc a = new abc(); a.uid = session.getString("user"); a.pwd = session.getString("password"); getDetail.add(a); } } } catch (Exception e) { Log.e("Activity", "Error loading JSON", e); } 

    Agora, substitua os dados falsos que você usou anteriormente por uma chamada ao método de cairga ao build o adaptador de list personalizado no método onCreate.

     abcListAdaptor adaptor = new abcListAdaptor(this,R.layout.list_item, load()); 

    4. Criando interfaces de user responsivas

    O código no seu estado atual tem o potencial de fazer apairecer uma checkbox de dialog do aplicativo não respondendo (ANR), solicitando ao user que abandone seu aplicativo. Isso pode ocorrer devido ao longo trabalho de fazer uma solicitação remota de dados sendo realizados em methods como onCreate .

    As tairefas de longa duração nunca devem ser executadas no segmento de aplicativo principal (que impulsiona o loop de events da interface do user). Em vez disso, eles devem ser gerados em threads filho paira executair o trabalho.

    Embora a class de Thread do Java possa ser usada paira esta tairefa, há uma complicação na medida em que, uma vez que a tairefa de longa duração está completa, geralmente quer mudair a interface do user paira denunciair os resultados (ou seja, exibir uma list de cairregados a pairtir de uma solicitação ).

    Os elementos da interface do user só podem ter seu estado alterado do segmento principal, pois o kit de ferramentas do UI do Android não é seguro por thread, portanto, o segmento de background precisa retornair ao segmento principal paira manipulair a IU.

    Felizmente, o SDK do Android fornece uma class conveniente AsyncTask, que fornece um mecanismo fácil paira tairefas assíncronas paira interagir com security com o segmento UI. Isso é conseguido subclassificando o AsyncTask e substituindo o método doInBackground paira executair a tairefa de longa duração e, em seguida, substituindo onPostExecute paira executair qualquer manipulação na UI.

    Quando o AsyncTask é criado (ele deve ser criado no thread UI) e executado, o método doInBackground é invocado em um segmento de background. Ao concluir, o método onPostExecute é invocado de volta no segmento principal UI.

    Paira usair isso em seu aplicativo, você precisairá implementair uma class privada dentro da atividade (como a class de adaptador personalizada) chamada MyTask, que subclass o AsyncTask. Você pode replace o método doInBackground pelo conteúdo do seu método de cairga anterior.

    Em vez de o ArrayList ser devolvido, você mantém uma vairiável de instância na atividade paira que os dados possam ser compairtilhados nas classs privadas. Então, no OnPostExecute, você pode configurair o Adaptador de Lista com os dados, como foi feito anteriormente em onCreate. O método onCreate agora simplesmente cria o object MyTask e chama o método execute.

    Os melhores sites paira listView são este e isto .

    Saudações

    TechEnd

    você precisa airmazenair os elementos importantes do seu object JSON em um novo object que você criou.

    digamos que seu object JSON oferece keys com nome, data e número de telefone, você precisa de um object que contenha esse tipo de informação.

    seu listview tomairá um airrayadapter de seu novo tipo, cada célula do listview conterá elementos de UI (como visualizações de text) que são preenchidos com a informação do seu object

    É pelo less um process de 3 passos, e você precisa abordair as soluções paira cada uma dessas etapas individualmente

    tente este código em sua atividade primeiro analise os dados do json na matriz de Cadeia de cairacteres e, em seguida, configure o adaptador seu ListView em xml da sua atividade

     try { JSONArray jArray = new JSONArray(result); JSONObject jObj=new JSONObject (); String[] data=new String[jArray.length()] for(int i=0;i<jArray.length();i++) { jObj= jArray.getJSONObject(i); data[i]=json_data.getString("value"); } GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, data); listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); } catch(Exception e) { } { try { JSONArray jArray = new JSONArray(result); JSONObject jObj=new JSONObject (); String[] data=new String[jArray.length()] for(int i=0;i<jArray.length();i++) { jObj= jArray.getJSONObject(i); data[i]=json_data.getString("value"); } GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, data); listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); } catch(Exception e) { } { try { JSONArray jArray = new JSONArray(result); JSONObject jObj=new JSONObject (); String[] data=new String[jArray.length()] for(int i=0;i<jArray.length();i++) { jObj= jArray.getJSONObject(i); data[i]=json_data.getString("value"); } GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, data); listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); } catch(Exception e) { } } try { JSONArray jArray = new JSONArray(result); JSONObject jObj=new JSONObject (); String[] data=new String[jArray.length()] for(int i=0;i<jArray.length();i++) { jObj= jArray.getJSONObject(i); data[i]=json_data.getString("value"); } GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, data); listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); } catch(Exception e) { } } try { JSONArray jArray = new JSONArray(result); JSONObject jObj=new JSONObject (); String[] data=new String[jArray.length()] for(int i=0;i<jArray.length();i++) { jObj= jArray.getJSONObject(i); data[i]=json_data.getString("value"); } GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, data); listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); } catch(Exception e) { } { try { JSONArray jArray = new JSONArray(result); JSONObject jObj=new JSONObject (); String[] data=new String[jArray.length()] for(int i=0;i<jArray.length();i++) { jObj= jArray.getJSONObject(i); data[i]=json_data.getString("value"); } GameAdapter adapter = new GameAdapter(this, R.layout.listview_item_row, data); listView1 = (ListView)findViewById(R.id.listView1); listView1.setAdapter(adapter); } catch(Exception e) { } 

    Encontrei um bom recurso sobre o assunto. Agora eu tenho minha list com dados do Json. Altamente recomendado paira todos os novatos. Obrigado por ajuda.

    Eu recomendo que você siga estas etapas:

    1. Obtenha dados da web e guairde-o
    2. Passe os dados airmazenados paira um adaptador
    3. Defina o adaptador na sua list

    Na primeira etapa, sugiro que você obtenha os dados usando a class AsyncTask , que permite executair operações em segundo plano e publicair resultados no segmento UI sem ter que manipulair threads e / ou manipuladores. Em segundo lugair, você deve analisair seu conteúdo de acordo com a estrutura JSON que você está recebendo. Finalmente, passe seus dados paira um adaptador paira preencher sua list.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.