2017-04-08 2 views
0

sehr neu für Android und Volley (double trouble :))Android Listview und Volley

die Listenansicht mit einer Reihe von Strings Nach dem Versuch (es funktionierte, und ich konnte das Ergebnis sehen) und Volley von einem zum Abrufen von diesen online test api (es hat funktioniert und ich sehe das Ergebnis)

Wenn ich versuchte, die beiden zu kombinieren (die Antwort von Volley, parse es und übergeben Sie es an den Adapter) und nichts zeigt. Würde mich jemand auf ein solides Tutorium hinweisen, das Volley und Listview kombiniert oder mir hilft, mir zu zeigen, wie man den Adapter dazu bringt, die Antwort korrekt in der Listenansicht anzuzeigen.

Hoffe jemand da draußen mit der Zeit zu helfen.

Mein 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> 

bekommt diesen Fehler enter image description here

+1

Ihre JsonUrl ist nicht gültig. Es hat ein Semikolon –

+1

Und Sie haben zwei 'Volley.newRequestQueue (this)', wo nur eine benötigt wird –

+0

@Marco in Ihrem Code erstellen Sie den Adapter unterhalb der Volley Anfrage. Die Volley-Anforderung ist standardmäßig asynchron, deshalb möchten Sie den Adapter erstellen oder den Wert in 'onResponse' zuweisen. – Enzokie

Antwort

1

Wie wird der Adapter mit Volley integriert?

Erstens, ich glaube, Sie müssen Ihre URL beheben, dann nur Sie wie ein Arraylist

Zweitens Ihr zweiter Parameter an den ArrayAdapter an einen Adapter hinzufügen muss ein Layout sein, die eine ID von android:id/text1 enthält wenn Sie keine zusätzlichen Argumente liefern (es ist in Ordnung, dass Sie das nicht wussten, ist es in der Dokumentation begraben). Abgesehen davon gibt es ein integriertes Layout für einen einzelnen 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

Vielen Dank für Ihre Zeit. Ich bin dankbar cricket_007 zu Ihrer diese Zeile "adapter.add (response.toString())" ... das ist der fehlende Teil von all diesen Tutorials. Es war lange 8 Stunden zu lesen und zu versuchen. Ich werde mit Upvote zurück sein. – Marco

+0

Brauchen Sie Ihre Hilfe noch einmal. Ich fügte Ihren Code hinzu (ich aktualisiere das activity_main.java oben) und erhalte Fehler (befestigte den Bildschirm für diesen Fehler oben) ... – Marco

+0

Es sollte unabhängig von dieser Warnung funktionieren, aber ich habe 'ArrayAdapter ' auf der linken Seite –