如何使用volley android实现listview

如何使用volley android实现listview,android,listview,android-listview,android-volley,Android,Listview,Android Listview,Android Volley,我正在开发一个应用程序,它可以抓取一个API的客户端列表,我需要在列表视图中显示它,我正在使用volley,我试图做的是以下几点,但它不起作用: public ListView txtDisplay; @Override protected Boolean doInBackground(Void... params) { try { txtDisplay = (Listview) findViewById(R.i

我正在开发一个应用程序,它可以抓取一个API的客户端列表,我需要在列表视图中显示它,我正在使用volley,我试图做的是以下几点,但它不起作用:

 public ListView txtDisplay;

@Override
        protected Boolean doInBackground(Void... params) {


            try {


                txtDisplay = (Listview) findViewById(R.id.listView);

                String url = "http://192.168.1.1/rep-mais-api/api";


                 JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
                        url, null,
                        new Response.Listener<JSONObject>() {

                            @Override
                            public void onResponse(JSONObject response) {


                                findViewById(R.id.progressBar1).setVisibility(View.GONE);
                            }
                        }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d("Error: " + error.getMessage());


                    }
                })
公共列表视图txtDisplay;
@凌驾
受保护的布尔doInBackground(Void…params){
试一试{
txtDisplay=(Listview)findViewById(R.id.Listview);
字符串url=”http://192.168.1.1/rep-mais-api/api";
JsonObjectRequest JSONObjectReq=新的JsonObjectRequest(Request.Method.GET,
url,空,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
findViewById(R.id.progressBar1).setVisibility(View.GONE);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(“错误:+Error.getMessage());
}
})
ActivityMain.xml文件:

<RelativeLayout 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" >

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/pager" />
    <TextView
        android:id="@+id/txtDisplay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <ListView
  android:layout_width="wrap_content"
   android:layout_height="wrap_content"
    android:id="@+id/listView"
  android:layout_alignParentTop="true" android:layout_alignParentLeft="true"/>
    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />
</RelativeLayout>

使用此示例解决了我的问题

import android.app.ProgressDialog;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
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.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;

public class MainActivity extends Activity {

    private String TAG = this.getClass().getSimpleName();
    private ListView lstView;
    private RequestQueue mRequestQueue;
    private ArrayList<NewsModel> arrNews ;
    private LayoutInflater lf;
    private VolleyAdapter va;
    private ProgressDialog pd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lf = LayoutInflater.from(this);


        arrNews = new ArrayList<NewsModel>();
        va = new VolleyAdapter();

        lstView = (ListView) findViewById(R.id.listView);
        lstView.setAdapter(va);
        mRequestQueue =  Volley.newRequestQueue(this);
        String url = "http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json";
        pd = ProgressDialog.show(this,"Please Wait...","Please Wait...");
        try{
            Thread.sleep(2000);
        }catch(Exception e){

            }
        JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.i(TAG,response.toString());
                parseJSON(response);
                va.notifyDataSetChanged();
                pd.dismiss();
;            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.i(TAG,error.getMessage());
            }
        });
        mRequestQueue.add(jr);



    }

    private void parseJSON(JSONObject json){
        try{
            JSONObject value = json.getJSONObject("value");
            JSONArray items = value.getJSONArray("items");
            for(int i=0;i<items.length();i++){

                    JSONObject item = items.getJSONObject(i);
                    NewsModel nm = new NewsModel();
                    nm.setTitle(item.optString("title"));
                    nm.setDescription(item.optString("description"));
                    nm.setLink(item.optString("link"));
                    nm.setPubDate(item.optString("pubDate"));
                    arrNews.add(nm);
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }


    }


    class NewsModel{
        private String title;
        private String link;
        private String description;
        private String pubDate;

        void setTitle(String title) {
            this.title = title;
        }

        void setLink(String link) {
            this.link = link;
        }

        void setDescription(String description) {
            this.description = description;
        }

        void setPubDate(String pubDate) {
            this.pubDate = pubDate;
        }

        String getLink() {
            return link;
        }

        String getDescription() {
            return description;
        }

        String getPubDate() {
            return pubDate;
        }

        String getTitle() {

            return title;
        }
    }


    class VolleyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return arrNews.size();
        }

        @Override
        public Object getItem(int i) {
            return arrNews.get(i);
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ViewHolder vh ;
           if(view == null){
               vh = new ViewHolder();
               view = lf.inflate(R.layout.row_listview,null);
               vh.tvTitle = (TextView) view.findViewById(R.id.txtTitle);
               vh.tvDesc = (TextView) view.findViewById(R.id.txtDesc);
               vh.tvDate = (TextView) view.findViewById(R.id.txtDate);
               view.setTag(vh);
          }
            else{
               vh = (ViewHolder) view.getTag();
           }

            NewsModel nm = arrNews.get(i);
            vh.tvTitle.setText(nm.getTitle());
            vh.tvDesc.setText(nm.getDescription());
            vh.tvDate.setText(nm.getPubDate());
            return view;
        }

         class  ViewHolder{
            TextView tvTitle;
             TextView tvDesc;
             TextView tvDate;

        }

    }
}
导入android.app.ProgressDialog;
导入android.os.Bundle;
导入android.app.Activity;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.JsonObjectRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONArray;
导入org.json.JSONObject;
导入java.util.ArrayList;
公共类MainActivity扩展了活动{
私有字符串标记=this.getClass().getSimpleName();
私有列表视图;
私有请求队列mRequestQueue;
私人ArrayList arrNews;
私人停车场;
私人截击;
私营部门;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lf=从(此)开始的更平坦的布局;
arrNews=新的ArrayList();
va=新的截击适配器();
lstView=(ListView)findViewById(R.id.ListView);
lstView.setAdapter(va);
mRequestQueue=Volley.newRequestQueue(this);
字符串url=”http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json";
pd=ProgressDialog.show(这是“请等待…”,请等待…”);
试一试{
《睡眠》(2000年);
}捕获(例外e){
}
JsonObjectRequest jr=新的JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
Log.i(TAG,response.toString());
parseJSON(响应);
va.notifyDataSetChanged();
pd.解散();
;            }
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.i(标记,error.getMessage());
}
});
mRequestQueue.add(jr);
}
私有void parseJSON(JSONObject json){
试一试{
JSONObject value=json.getJSONObject(“值”);
JSONArray items=value.getJSONArray(“items”);

对于(int i=0;i请不要发布“仅链接”答案。这会使其他用户难以访问信息,而且,由于某种原因,链接可能会变得无效(已删除),并且信息会丢失。我看到链接非常有用且很长,但是,请尝试发布对您帮助最大的部分。