当前位置: 首页 > 知识库问答 >
问题:

使用ArrayAdapter向listview传递volley响应

太叔望
2023-03-14
  package hfad.com.adapters;


    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;

    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.toolbox.JsonArrayRequest;
    import com.android.volley.toolbox.Volley;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    public class MainActivity extends Activity {

        //thorntech.com parsing jsonandroid using colley library
        TextView results;
        // URL of object to be parsed
        String JsonURL = "https://raw.githubusercontent.com/ianbar20/JSON-Volley-Tutorial/master/Example-JSON-Files/Example-Array.JSON";
        // This string will hold the results
        String data = "";
        // Defining the Volley request queue that handles the URL request concurrently

        ListView myList;

        RequestQueue requestQueue;

        //Adding adapter and assign it -set- to a listview



        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // Creates the Volley request queue
            requestQueue = Volley.newRequestQueue(this);

            // Casts results into the TextView found within the main layout XML with id jsonData
            results = (TextView) findViewById(R.id.textView);
            myList = (ListView) findViewById(R.id.listv);
            final ArrayAdapter<String> myAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
            ListView myList = (ListView) findViewById(R.id.listv);
            myList.setAdapter(myAdapter);

            // Creating the JsonArrayRequest class called arrayreq, passing the required parameters
            //JsonURL is the URL to be fetched from
            JsonArrayRequest arrayreq = new JsonArrayRequest(JsonURL,
                    // The second parameter Listener overrides the method onResponse() and passes
                    //JSONArray as a parameter
                    new Response.Listener<JSONArray>() {

                        // Takes the response from the JSON request
                        @Override
                        public void onResponse(JSONArray response) {


                     //Juan suggestion:
                     ArrayList<String> myArraylist
                    myArraylist = new ArrayList<String>();

            }}

My mainactivity.xml:包括一个textview和ListView。

<?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"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context=".MainActivity"
    android:weightSum="1">


    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

   <ListView
       android:id="@+id/listv"
       android:layout_width="match_parent"
       android:layout_height="89dp"/>


</LinearLayout>

我的问题是如何使用ArrayAdapter将响应从volley传递到listview?

共有1个答案

卢勇
2023-03-14

在这里:

 public void onResponse(JSONArray response) {

 }

您应该遍历JSONArray并提取每个字符串,并将其放入ArrayList

ArrayList<String> stringsFromJson = new ArrayList<>();

然后,也是在同一位置,为适配器设置值:

myAdapter.clear();
myAdapter.addAll(stringsFromJson); 
myAdapter.notifyDataSetChanged();

另外,您的适配器应该定义为arrayadapter

编辑%1

你需要考虑的一些事情:

    null

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.apackagename.so_43691098">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">

        <activity android:name="SO_43691098">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

主要活动

package com.apackagename.so_43691098;

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

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.Volley;

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

import java.util.ArrayList;


public class SO_43691098 extends AppCompatActivity {

        private static final String TAG = SO_43691098.class.getSimpleName();

        //thorntech.com parsing jsonandroid using colley library
        TextView results;
        // URL of object to be parsed
        String JsonURL = "https://raw.githubusercontent.com/ianbar20/JSON-Volley-Tutorial/master/Example-JSON-Files/Example-Array.JSON";
        // This string will hold the results
        String data = "";
        // Defining the Volley request queue that handles the URL request concurrently

        ListView myList;

        RequestQueue requestQueue;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_activity);
            // Creates the Volley request queue
            requestQueue = Volley.newRequestQueue(this);

            // Casts results into the TextView found within the main layout XML with id jsonData
            results = (TextView) findViewById(R.id.textView);
            myList = (ListView) findViewById(R.id.listv);
            final ArrayAdapter<String> myAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
            ListView myList = (ListView) findViewById(R.id.listv);
            myList.setAdapter(myAdapter);

            // Creating the JsonArrayRequest class called arrayreq, passing the required parameters
            //JsonURL is the URL to be fetched from
            JsonArrayRequest arrayRequest = new JsonArrayRequest(JsonURL,
                    new Response.Listener<JSONArray>(){

                        @Override
                        public void onResponse(JSONArray response) {
                            //Juan suggestion:
                            ArrayList<String> myArrayList = new ArrayList<>();

                            try {
                                JSONArray shapes = response.getJSONObject(1).getJSONArray("shapeArray");
                                for(int i=0; i<shapes.length(); i++) {
                                    myArrayList.add(shapes.getJSONObject(i).getString("shapeName"));
                                }
                            } catch (JSONException e){
                                    Log.e(TAG, "Getting shape name", e);
                            }

                            myAdapter.clear();
                            myAdapter.addAll(myArrayList);
                            myAdapter.notifyDataSetChanged();
                        }
                    },
                    new Response.ErrorListener(){

                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e(TAG, error.getMessage(), error);
                        }
                    }
            );

            requestQueue.add(arrayRequest);

        }
}

我没有改变布局。

 类似资料:
  • 问题内容: 我可以选择该项目并在Webdriver上检索信息。但是我不知道如何将响应URL传递给crawlspider。 所以这就是我被困住的地方。我能够使用上面的代码进行查询。但是,如何将resp_for_scrapy传递给crawlspider?我把resp_for_scrapy代替了item,但这没用。 任何建议将不胜感激!!!! 编辑我包括一个中间件类,可从Spider类之前的下拉列表中进

  • 问题内容: 我是Android和Volley的新手,需要您的帮助。我需要发布一个String,有一个json来响应它,如果它没有引发错误的请求,请从我的请求中获取一些值来启动一个新的Intent。 这是我想做的一个简单模式:按下登录按钮->星形请求->检查是否正常->使用响应值启动新的意图。 我已经看到Volley使用异步方法进行查询。这是我的代码: 我之所以使用Volley,是因为我的Gradl

  • 我尝试对http请求使用volley。我在postman上尝试了一个请求,响应标题如下: null 为什么它会改变内容?如何获取和?

  • 我正在创建一个支持多重选择的QML,并将在我的应用程序中实例化其中的多个。我需要将键盘焦点赋予特定列表,处理该列表的按键,并根据焦点为选定的行绘制高亮显示。 但是,将赋予ListView委托或ListView本身并不会导致在ListView上出现,也不会导致触发按键信号。 我创建了一个简单的示例应用程序,展示了我的问题: 单击任一列表都不会将选定的行变成粉红色,按上/下键也不会调整选定内容。 如何

  • https://loginter.moveon.pro/?rest_route=/simple-jwt-login/v1/auth&email=email&password=密码 并得到如下所示的JSON: 我正在Android Studio上使用Volley库。 null null 在应用程序build.gradle build.gradle Volley依赖项中安装了Volley 在my ma

  • 我如何将值从空手道API传递到Java类? 正如文档中提到的,我使用了以下代码段从Java API获取响应。但它返回带有未格式化的JSON内容的响应。 然后,我使用以下脚本打印响应。 多谢了。