2017-04-08 1 views
0

très nouveau pour Android et reprise de volée (double problème :))Android ListView et Volley

Après avoir essayé la listview avec un tableau de chaînes (cela a fonctionné et j'ai pu voir le résultat) et volée pour récupérer d'un de ces api de test en ligne (cela a fonctionné et je vois le résultat)

Quand j'ai essayé de combiner les deux (la réponse de volée, l'analyser et le passer à l'adaptateur) et rien ne montre. Est-ce que quelqu'un pourrait me diriger vers un solide tutoriel combinant volley et listview ou aider à me montrer comment obtenir l'adaptateur pour afficher la réponse correctement dans la liste.

J'espère que quelqu'un là-bas avec le temps pour aider.

Mon Mainactivity.java

package com.example.web.listviewexample; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

public class MainActivity extends AppCompatActivity { 
    //Array of strings... 
    String[] mobileArray = {"Android", "Iphone", "Windows", "WebOs", "BlackBerry", "Max OS x"}; 

    TextView results; 
    String JsonURL ="https://reqres.in/api/users/2"; 
    String data=""; 

    //define the volley request queue. It handles requests 
    RequestQueue requestQueue; 



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

     //get the listview that will communicate with the adapter 
     ListView listexample = (ListView) findViewById(R.id.mobile_list); 
     //prepare the adapter 
     final ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
     //attach the adapter 
     listexample.setAdapter(adapter); 

     //Volley stuff --cricket_007 Stackoverflow.com answer 
     final JsonObjectRequest obj= new JsonObjectRequest(Request.Method.GET, JsonURL, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        // parse the response 
        response = response.getJSONObject("data"); 

        // add things to the adapter 
        adapter.add(response.toString()); 
       } 
        catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener(){ 
       @Override 
       public void onErrorResponse(VolleyError error){error.printStackTrace(); 
       } 

      }); 

     Volley.newRequestQueue(this).add(obj); 
     } 
    } 

Activity_Main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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=".MainActivity" 
    > 


    <ListView 
    android:id="@+id/mobile_list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout 

activity_listview.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/label" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textSize="25sp" 
    android:padding="10dp" 
    android:textStyle="bold"> 

</TextView> 

obtenir cette erreur enter image description here

+1

Votre JsonUrl n'est pas valide. Il a un point-virgule –

+1

Et vous avez deux 'Volley.newRequestQueue (this)', où un seul est nécessaire –

+0

@Marco dans votre code vous créez l'adaptateur sous la demande Volley. La requête de Volley est Asynchrone par défaut donc vous voulez créer l'Adaptateur ou assigner la valeur dans 'onResponse'. – Enzokie

Répondre

1

Comment intégrer l'adaptateur avec Volley?

D'abord, je pense que vous devez corriger votre URL, vous ajoutez juste un adaptateur comme un Arraylist

En second lieu, votre deuxième paramètre à la ArrayAdapter doit être une mise en page qui contient un ID de android:id/text1 si vous n'allez pas fournir d'arguments supplémentaires (c'est bien que vous ne le sachiez pas, il est enterré dans la documentation). Cela étant dit, il y a une disposition intégrée pour un seul TextView

//Get the listview 
    ListView listView = (ListView) findViewById(R.id.mobile_list); 
    // make adapter and set it 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
    listView.setAdapter(adapter); 

    // Do Volley things 
    final JsonObjectRequest obj= new JsonObjectRequest(Request.Method.GET, JsonUrl, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       // parse the response 
       response = response.getJSONObject("data"); 

       // add things to the adapter 
       adapter.add(response.toString()); 
+0

Merci à vous deux pour votre temps. Je vous remercie cricket_007 à votre ligne "adapter.add (response.toString())" ... c'est la partie manquante de tous ces tutoriels. Ça fait 8 heures de lecture et d'essai. Je serai de retour avec upvote lol. – Marco

+0

Besoin de votre aide à nouveau. J'ai ajouté votre code (je met à jour le activity_main.java ci-dessus) et obtenir l'erreur (joint l'écran pour cette erreur ci-dessus) ... – Marco

+0

Cela devrait fonctionner indépendamment de cet avertissement, mais j'ai oublié 'ArrayAdapter ' sur le côté gauche –