Android 如何与适配器类共享arraylist

Android 如何与适配器类共享arraylist,android,arraylist,baseadapter,android-gridview,Android,Arraylist,Baseadapter,Android Gridview,我已经创建了一个数组列表,它从给定的URL获取数据,现在我希望这个ArrayList显示在GridView中。我在ImageAdapter中传递了它,但是ArrayList显示为空。API响应列表在项目上获取数据,单击它显示数据 public ArrayList<String> images, urlResponse; FloatingActionButton fab; public String Data_Url = "http://gurbaaj.16mb.com

我已经创建了一个数组列表,它从给定的
URL
获取数据,现在我希望这个
ArrayList
显示在
GridView
中。我在
ImageAdapter
中传递了它,但是
ArrayList
显示为空。
API
响应
列表
在项目上获取数据,单击它显示数据

public ArrayList<String> images, urlResponse;
    FloatingActionButton fab;
    public String Data_Url = "http://gurbaaj.16mb.com/photos.php";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GridView gallery = (GridView) findViewById(R.id.gridview);
        fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "FAB clicked", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this, ImageCheckActivity.class);
                intent.putStringArrayListExtra("stock_list", urlResponse);
                startActivity(intent);
            }
        });
        //Action On item click
        gallery.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                                    int position, long arg3) {
                if (null != images && !images.isEmpty())
                    Toast.makeText(
                            getApplicationContext(),
                            "position " + position + " " + urlResponse, Toast.LENGTH_SHORT).show();
            }
        });
        gallery.setAdapter(new ImageAdapter(this, urlResponse));
    }

    @Override
    protected void onStart() {
        Toast.makeText(this, "On Start" , Toast.LENGTH_SHORT).show();
        super.onStart();
        final ProgressDialog loading = ProgressDialog.show(MainActivity.this,"Data is Loading", "Please wait...",false,false);
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Data_Url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                loading.dismiss();
                parseData(response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                Toast.makeText(getApplicationContext(), "Network error", Toast.LENGTH_SHORT).show();
            }
        });
// Creating RequestQueue
        CustomVolleyRequestQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonArrayRequest);
    }

    private void parseData(JSONArray response) {
        urlResponse = new ArrayList<>();
        for (int i = 0; i < response.length(); i++) {
            JSONObject jsonObject;
            try {
                jsonObject = response.getJSONObject(i);
                String Images = jsonObject.getString("Image");
                urlResponse.add(Images);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }



 private class ImageAdapter extends BaseAdapter {

        /**
         * The context.
         */
        private Activity context;
        ArrayList<String> urlImages;

        /**
         * Instantiates a new image adapter.
         *
         * @param localContext the local context
         */

        public ImageAdapter(Activity localContext, ArrayList<String> urlImages) {
            context = localContext;
            images = getAllShownImagesPath(context);
            this.urlImages = urlImages;
        }

        public int getCount() {
            return urlImages.size();
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(final int position, View convertView,
                            ViewGroup parent) {
            ImageView picturesView;
            if (convertView == null) {
                picturesView = new ImageView(context);
                picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                picturesView
                        .setLayoutParams(new GridView.LayoutParams(270, 270));

            } else {
                picturesView = (ImageView) convertView;
            }
            try {
                Glide.with(context).load(urlImages.get(position))
                        .placeholder(R.mipmap.ic_launcher_round).centerCrop()
                        .into(picturesView);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return picturesView;
        }
公共阵列列表图像,urlResponse;
浮动操作按钮;
公共字符串数据\u Url=”http://gurbaaj.16mb.com/photos.php";
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView画廊=(GridView)findViewById(R.id.GridView);
fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Toast.makeText(MainActivity.this,“FAB clicked”,Toast.LENGTH_SHORT.show();
意向意向=新意向(MainActivity.this、ImageCheckActivity.class);
intent.putStringArrayListExtra(“库存清单”,urlResponse);
星触觉(意向);
}
});
//单击项目时的操作
gallery.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、,
整数位置,长arg3){
if(null!=images&&!images.isEmpty())
Toast.makeText(
getApplicationContext(),
“position”+position+“”+urresponse,Toast.LENGTH_SHORT).show();
}
});
setAdapter(新的ImageAdapter(this,urlResponse));
}
@凌驾
受保护的void onStart(){
Toast.makeText(这是“开始时”,Toast.LENGTH_SHORT).show();
super.onStart();
final ProgressDialog loading=ProgressDialog.show(MainActivity.this,“数据正在加载”,“请稍候…”,false,false);
JsonArrayRequest JsonArrayRequest=新的JsonArrayRequest(数据\ Url,新的响应.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
loading.dispose();
解析数据(响应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
错误。printStackTrace();
Toast.makeText(getApplicationContext(),“网络错误”,Toast.LENGTH\u SHORT.show();
}
});
//创建请求队列
CustomVolleyRequestQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonArrayRequest);
}
私有数据(JSONArray响应){
urlResponse=newArrayList();
对于(int i=0;i
解析数据后添加此行:

gallery.setAdapter(new ImageAdapter(this, urlResponse));
就像这样:

private void parseData(JSONArray response) {
    urlResponse = new ArrayList<>();
    for (int i = 0; i < response.length(); i++) {
        JSONObject jsonObject;
        try {
            jsonObject = response.getJSONObject(i);
            String Images = jsonObject.getString("Image");
            urlResponse.add(Images);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    gallery.setAdapter(new ImageAdapter(this, urlResponse));
}
private void parseData(JSONArray响应){
urlResponse=newArrayList();
对于(int i=0;i
您应该在ImageAdapter中创建方法,如在ArrayList(add、addAll等)中以及在ImageAdapter调用notifyDataSetChanged中更改ArrayList后

public void add(String text) {
    urlImages.add(text);
    notifyDataSetChanged();
}

public void addAll(List<String> text) {
    urlImages.addAll(text);
    notifyDataSetChanged();
}
public void添加(字符串文本){
添加(文本);
notifyDataSetChanged();
}
公共void addAll(列表文本){
urlmages.addAll(文本);
notifyDataSetChanged();
}

您还将null对象作为URL传递给ItemAdapter,您应该考虑创建构造函数,它将用新的空列表初始化URLIVE,或者传递非空对象。