Jayaprakash7
11/30/2016 - 5:15 AM

Json Parsing

package com.example.arikeasavan.jsonparseeg;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import static com.example.arikeasavan.jsonparseeg.MovieModel.*;

public class MainActivity extends AppCompatActivity {


    Button button;
    ListView listView;
    ArrayList<MovieModel> movieModelArrayList;
    MovieModel movieModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);
        button = (Button) findViewById(R.id.button1);

        DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).build();
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(getApplicationContext()).defaultDisplayImageOptions(displayImageOptions).build();
        ImageLoader.getInstance().init(configuration);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               JsonTask jsonTask = (JsonTask) new JsonTask().execute("http://jsonparsing.parseapp.com/jsonData/moviesData.txt");
            }
        });
    }

    public class JsonTask extends AsyncTask<String,Void,ArrayList<MovieModel>>{

        @Override
        protected ArrayList<MovieModel> doInBackground(String... params) {
            HttpURLConnection connection = null;
            InputStream inputStream;
            InputStreamReader inputStreamReader;
            BufferedReader bufferedReader = null;



            try {
                URL url = new URL(params[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.connect();
                inputStream = connection.getInputStream();
                inputStreamReader = new InputStreamReader(inputStream);
                bufferedReader = new BufferedReader(inputStreamReader);
                String line = "";
                StringBuffer buffer = new StringBuffer();

                while ((line = bufferedReader.readLine()) != null){
                    buffer.append(line);
                }
                String json = buffer.toString();

                JSONObject jsonObject = new JSONObject(json);
                JSONArray jsonArray = jsonObject.getJSONArray("movies");

                movieModelArrayList = new ArrayList<>();
                for (int i = 0;i<jsonArray.length();i++) {

                    JSONObject object = jsonArray.getJSONObject(i);
                    String movie = object.getString("movie");
                    int year = object.getInt("year");
                    float rating = (float) object.getDouble("rating");
                    String duration = object.getString("duration");
                    String director = object.getString("director");
                    String tagline = object.getString("tagline");
                    String image = object.getString("image");
                    String story = object.getString("story");

                    MovieModel movieModel = new MovieModel();
                    movieModel.setMovie(movie);
                    movieModel.setYear(year);
                    movieModel.setRating(rating);
                    movieModel.setDuration(duration);
                    movieModel.setDirector(director);
                    movieModel.setTagline(tagline);
                    movieModel.setImage(image);
                    movieModel.setStory(story);

                    ArrayList<Cast> castArrayList = new ArrayList<>();
                    JSONArray array = object.getJSONArray("cast");
                    for (int j = 0;j<array.length();j++){

                        MovieModel.Cast cast = new MovieModel.Cast();
                        JSONObject object1 = array.getJSONObject(j);
                            String name = object1.getString("name");
                        cast.setName(name);
                        castArrayList.add(cast);

                    }
                    movieModel.setArrayList(castArrayList);
                    movieModelArrayList.add(movieModel);
                }

                return movieModelArrayList;


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

        @Override
        protected void onPostExecute(ArrayList<MovieModel> s) {

            super.onPostExecute(s);
            CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(),R.layout.row,s);
            listView.setAdapter(customAdapter);




        }
    }

    public class CustomAdapter extends ArrayAdapter{

       private List<MovieModel> objects;
        private int resource;
        LayoutInflater inflater;
        public CustomAdapter(Context context, int resource, List<MovieModel> objects) {
            super(context, resource, objects);

            this.objects = objects;
            this.resource = resource;
            inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

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

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

            }
            ImageView imageView;
            TextView movie,tag,year,duration,director,cast,story;
            final ProgressBar progressBar;
            RatingBar ratingBar;

            imageView = (ImageView) convertView.findViewById(R.id.imageView);
            movie = (TextView) convertView.findViewById(R.id.movie);
            tag = (TextView) convertView.findViewById(R.id.tag);
            year = (TextView) convertView.findViewById(R.id.year);
            duration = (TextView) convertView.findViewById(R.id.duration);
            director = (TextView) convertView.findViewById(R.id.director);
            cast = (TextView) convertView.findViewById(R.id.cast);
            story = (TextView) convertView.findViewById(R.id.story);
            progressBar = (ProgressBar) convertView.findViewById(R.id.progress_bar);
            ratingBar = (RatingBar) convertView.findViewById(R.id.ratingBar);

            movie.setText(movieModelArrayList.get(position).getMovie());
            tag.setText(movieModelArrayList.get(position).getTagline());
            year.setText("Year: "+movieModelArrayList.get(position).getYear());
            duration.setText("Duration: "+movieModelArrayList.get(position).getDuration());
            director.setText("Director: "+movieModelArrayList.get(position).getDirector());
            story.setText("Story: "+movieModelArrayList.get(position).getStory());

            ImageLoader.getInstance().displayImage(movieModelArrayList.get(position).getImage(), imageView, 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);
                }
            });

            StringBuffer buffer = new StringBuffer();
            for (MovieModel.Cast cast1:movieModelArrayList.get(position).getArrayList())
            {
                buffer.append(cast1.getName()+",");
            }
            cast.setText("Cast: "+buffer);
            ratingBar.setRating(movieModelArrayList.get(position).getRating()/2);

            return convertView;
        }
    }
}