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