2015-05-10 3 views
1

Я получаю пустой экран при попытке разобрать json через пользовательский адаптер.Пустой экран на Gridview при использовании Arraylist

Im почти уверен, что это происходит из-за проблемы с ArrayList под названием oslist

Я работаю из примера, в котором вы пройти Одноиндексный/переменный каждый раз (но это было для ListView, я сейчас нахожусь попробуйте gridview), однако учебник, который я выполнил для gridview, передает весь массив через адаптер.

Я ожидаю получить список путей из файла JSon

Эти пути являются ссылки на изображения

эти изображения должны отображающих в GridView внутри моего приложения

я использую Picasso для обработки изображений (не то, что он должен сделать разницу

MainActivity

package com.example.alex.jsonparsegridview; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.view.View; 
import android.widget.AdapterView.OnItemClickListener; 

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

import java.util.ArrayList; 
import java.util.HashMap; 

public class MainActivity extends Activity { 

    GridView gridView; 

    static final String[] MOBILE_OS = new String[]{ 
      "Android", "iOS", "Windows", "Blackberry"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     new JSONParse().execute(); 

    } 


    private class JSONParse extends AsyncTask<String, String, JSONArray> { 
     private ProgressDialog pDialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setMessage("Getting Data ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 

     } 

     @Override 
     protected JSONArray doInBackground(String... args) { 

      JSONParser jParser = new JSONParser(); 

      // Getting JSON from URL 

      String url = "http://www.500kgiveaway.co.uk/getimagesmob.php"; 
      JSONArray json = jParser.getJSONFromUrl(url); 
      return json; 
     } 

     @Override 
     protected void onPostExecute(JSONArray json) { 
      pDialog.dismiss(); 
      try { 
       // Getting JSON Array from URL 

       JSONArray android = json; 
       String TAG_PATH = "path"; 
       ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 

       for (int i = 0; i < android.length(); i++) { 

        JSONObject c = android.getJSONObject(i); 

        // Storing JSON item in a Variable 
        String path = c.getString(TAG_PATH); 

        // Adding value HashMap key => value 

        HashMap<String, String> map = new HashMap<String, String>(); 

        map.put(TAG_PATH, path); 

        oslist.add(map); 


       } 
       //copied from onCreate 
        gridView = (GridView) findViewById(R.id.gridView1); 

        gridView.setAdapter(new ImageAdapter(MainActivity.this, oslist)); 

        gridView.setOnItemClickListener(new OnItemClickListener() { 
         public void onItemClick(AdapterView<?> parent, View v, 
               int position, long id) { 
          Toast.makeText(
            getApplicationContext(), 
            ((TextView) v.findViewById(R.id.grid_item_label)) 
              .getText(), Toast.LENGTH_SHORT).show(); 

         } 
        }); 

       //End Copy 



      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
} 

ImageAdaptor

package com.example.alex.jsonparsegridview; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.squareup.picasso.Picasso; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 


public class ImageAdapter extends BaseAdapter { 
    private Context context; 


    public ImageAdapter(Context context, List<? extends Map<String, ?>> data) { 
     this.context = context; 

    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View gridView; 

     if (convertView == null) { 

      gridView = new View(context); 

      // get layout from mobile.xml 
      gridView = inflater.inflate(R.layout.mobile, null); 

      // set value into textview 
      TextView textView = (TextView) gridView 
        .findViewById(R.id.grid_item_label); 
      textView.setText(((Map)getItem(position)).get("path").toString()); 

      // set image based on selected text 
      ImageView imageView = (ImageView) gridView 
        .findViewById(R.id.grid_item_image); 


      Picasso.with(context).load("http://www.500kgiveaway.co.uk/" + ((Map) getItem(position)).get("path").toString()).into(imageView); 

     } else { 
      gridView = (View) convertView; 
     } 

     return gridView; 
    } 

    @Override 
    public int getCount() { 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

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

} 

ответ

2

getCount должен возвращать размер набора данных, а не 0. В противном случае getView не называется. getItem должен вернуть элемент в позиции вашего набора данных, а не null.

+0

Thabks для ответа. Я считаю, что мне нужно перебирать список, чтобы подсчитывать экземпляры, однако я борюсь с реализацией. Есть идеи? Есть ли лучший способ передать данные json в адаптер изображения? – PowerMan2015

+0

Вы уже передали данные. Сохраните ссылку 'data' и верните свой размер() в getCount – Blackbelt

Смежные вопросы