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