如何共享

问题描述:

我创建了从给定URL获取数据的数组列表适配器类ArrayList中,现在我想这个ArrayList显示在GridView。我在ImageAdapter通过它,但ArrayList正显示出null.The API响应List正在将数据作为On项目单击它显示数据。如何共享

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; 
     } 

加入这一行后,解析您的数据:

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)); 
} 
+0

请尝试这一个..希望它会帮助你.. –

+0

它的工作原理:-)谢谢你..可以解释一下吗? –

+0

你只需要将null数组添加到适配器中.. gallery.setAdapter(new ImageAdapter(this,urlResponse));你的arralist填充后解析你的数据,所以在解析你的数据后调用适配器。 –

您应该创造ImageAdapter方法,比如在ArrayList中(加,中的addAll等)和后ImageAdapter中ArrayList中的更改调用notifyDataSetChanged。

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

public void addAll(List<String> text) { 
    urlImages.addAll(text); 
    notifyDataSetChanged(); 
} 

而且传递null对象作为urlImages到ItemAdapter,你应该考虑构造的创建,这将初始化urlImages新的空单,或通过非空对象。