vinaysshenoy / mugen

Microlibrary for implementing infinite scroll on Android

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to implement in my code of Json in listview

TuxRneR opened this issue · comments

This is my code with the adapter:
public class JSONTask extends AsyncTask<String,String, List >{

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.show();
    }

    @Override
    protected List<MovieModel> doInBackground(String... params) {
        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try {
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(stream));
            StringBuffer buffer = new StringBuffer();
            String line ="";
            while ((line = reader.readLine()) != null){
                buffer.append(line);
            }

            String finalJson = buffer.toString();

            JSONObject parentObject = new JSONObject(finalJson);
            JSONArray parentArray = parentObject.getJSONArray("movies");

            List<MovieModel> movieModelList = new ArrayList<>();

            Gson gson = new Gson();
            for(int i=0; i<parentArray.length(); i++) {
                JSONObject finalObject = parentArray.getJSONObject(i);
                /**
                 * below single line of code from Gson saves you from writing the json parsing yourself which is commented below
                  */
                MovieModel movieModel = gson.fromJson(finalObject.toString(), MovieModel.class);

// movieModel.setMovie(finalObject.getString("movie"));
// movieModel.setYear(finalObject.getInt("year"));
// movieModel.setRating((float) finalObject.getDouble("rating"));
// movieModel.setDirector(finalObject.getString("director"));
//
// movieModel.setDuration(finalObject.getString("duration"));
// movieModel.setTagline(finalObject.getString("tagline"));
// movieModel.setImage(finalObject.getString("image"));
// movieModel.setStory(finalObject.getString("story"));
//
// List<MovieModel.Cast> castList = new ArrayList<>();
// for(int j=0; j<finalObject.getJSONArray("cast").length(); j++){
// MovieModel.Cast cast = new MovieModel.Cast();
// cast.setName(finalObject.getJSONArray("cast").getJSONObject(j).getString("name"));
// castList.add(cast);
// }
// movieModel.setCastList(castList);
// adding the final object in the list
movieModelList.add(movieModel);
}
return movieModelList;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            if(connection != null) {
                connection.disconnect();
            }
            try {
                if(reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return  null;
    }

    @Override
    protected void onPostExecute(final List<MovieModel> result) {
        super.onPostExecute(result);
        dialog.dismiss();
        if(result != null) {
            MovieAdapter adapter = new MovieAdapter(getApplicationContext(), R.layout.row, result);
            lvMovies.setAdapter(adapter);
            lvMovies.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    MovieModel movieModel = result.get(position);
                    Intent intent = new Intent(MainActivity.this, DetailActivity.class);
                    intent.putExtra("movieModel", new Gson().toJson(movieModel));
                    startActivity(intent);
                }
            });
        } else {
            Toast.makeText(getApplicationContext(), "Can not fetch data. ", Toast.LENGTH_SHORT).show();
        }
    }
}

public class MovieAdapter extends ArrayAdapter{

    private List<MovieModel> movieModelList;
    private int resource;
    private LayoutInflater inflater;
    public MovieAdapter(Context context, int resource, List<MovieModel> objects) {
        super(context, resource, objects);
        movieModelList = objects;
        this.resource = resource;
        inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    }

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

        ViewHolder holder = null;

        if(convertView == null){
            holder = new ViewHolder();
            convertView = inflater.inflate(resource, null);

            holder.ivMovieIcon = (ImageView)convertView.findViewById(R.id.ivIcon);
            holder.tvMovie = (TextView)convertView.findViewById(R.id.tvMovie);
            holder.tvTagline = (TextView)convertView.findViewById(R.id.tvTagline);
            holder.tvYear = (TextView)convertView.findViewById(R.id.tvYear);
            //holder.tvDuration = (TextView)convertView.findViewById(R.id.tvDuration);
            //holder.tvDirector = (TextView)convertView.findViewById(R.id.tvDirector);
            holder.rbMovieRating = (RatingBar)convertView.findViewById(R.id.rbMovie);
            //holder.tvCast = (TextView)convertView.findViewById(R.id.tvCast);
            //holder.tvStory = (TextView)convertView.findViewById(R.id.tvStory);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        final ProgressBar progressBar = (ProgressBar)convertView.findViewById(R.id.progressBar);

        //Get the dimens of ImageView
        //final int width_image = (int) getResources().getDimension(R.dimen.imagen_Width);
        //final int height_image = (int) getResources().getDimension(R.dimen.imagen_Height);

        Picasso.with(getContext())
                .load(movieModelList.get(position).getImage())
                .error(android.R.drawable.stat_notify_error)
                .into(holder.ivMovieIcon, new Callback() {
                    @Override
                    public void onSuccess() {
                        progressBar.setVisibility(View.GONE);
                    }

                    @Override
                    public void onError() {
                        progressBar.setVisibility(View.GONE);
                    }
                });
        /*ImageLoader.getInstance().displayImage(movieModelList.get(position).getImage(), holder.ivMovieIcon, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                progressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                progressBar.setVisibility(View.GONE);
            }
        });*/

        holder.tvMovie.setText(movieModelList.get(position).getMovie());
        holder.tvTagline.setText(movieModelList.get(position).getTagline());
        holder.tvYear.setText("("+ movieModelList.get(position).getYear() + ")");
        //holder.tvDuration.setText("Duration:" + movieModelList.get(position).getDuration());
        //holder.tvDirector.setText("Director:" + movieModelList.get(position).getDirector());

        // rating bar
        holder.rbMovieRating.setRating(movieModelList.get(position).getRating()/2);

        /*StringBuffer stringBuffer = new StringBuffer();
        for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){
            stringBuffer.append(cast.getName() + ", ");
        }*/

        //holder.tvCast.setText("Cast:" + stringBuffer);
        //holder.tvStory.setText(movieModelList.get(position).getStory());
        return convertView;
    }


    class ViewHolder{
        private ImageView ivMovieIcon;
        private TextView tvMovie;
        private TextView tvTagline;
        private TextView tvYear;
        //private TextView tvDuration;
        //private TextView tvDirector;
        private RatingBar rbMovieRating;
        //private TextView tvCast;
        //private TextView tvStory;
    }

}

My listview is declared: -->lvMovies = (ListView)findViewById(R.id.lvMovies);