Skip to content

Instantly share code, notes, and snippets.

@AhmedBadrSayed
Created March 15, 2016 15:21
Show Gist options
  • Save AhmedBadrSayed/a1f09c6107b9f3a5a198 to your computer and use it in GitHub Desktop.
Save AhmedBadrSayed/a1f09c6107b9f3a5a198 to your computer and use it in GitHub Desktop.
MoviesFragment
package com.projects.ahmedbadr.moviesapp.Screens;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;
import com.projects.ahmedbadr.moviesapp.Adapters.MoviesGridAdapter;
import com.projects.ahmedbadr.moviesapp.Interfaces.PostersAdapterlistener;
import com.projects.ahmedbadr.moviesapp.R;
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.URL;
import java.util.ArrayList;
/**
* A placeholder fragment containing a simple view.
*/
public class MoviesFragment extends Fragment implements PostersAdapterlistener {
public MoviesGridAdapter moviesAdapter;
GridView gridView;
public MoviesFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View RootView = inflater.inflate(R.layout.fragment_movies, container, false);
gridView = (GridView) RootView.findViewById(R.id.posters_grid);
gridView.setAdapter(moviesAdapter);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity());
String Url = pref.getString(getString(R.string.pref_sort_key)
, getString(R.string.pref_sort_default));
Get_Movies get_movies = new Get_Movies(this);
get_movies.execute(Url);
return RootView;
}
@Override
public void listen(MoviesGridAdapter adapter) {
adapter = moviesAdapter;
adapter.notifyDataSetChanged();
}
public class Get_Movies extends AsyncTask<String, Void, ArrayList<String>> {
PostersAdapterlistener postersAdapterlistener;
public Get_Movies(PostersAdapterlistener postersAdapter){
postersAdapterlistener = postersAdapter;
}
private ArrayList<String> getPostersURLFromJson(String MoviesJson) throws JSONException {
final String TMDB_RESULTS = "results";
final String TMDB_PATH = "poster_path";
final String BASIC_URL = "http://image.tmdb.org/t/p/w185";
ArrayList<String> PostersPathsArray = new ArrayList<String>();
String PosterPath = "";
JSONObject Movies_json = new JSONObject(MoviesJson);
JSONArray MoviesArray = Movies_json.getJSONArray(TMDB_RESULTS);
for(int i = 0; i < MoviesArray.length(); i++) {
// Get the JSON object representing the movie
JSONObject MovieData = MoviesArray.getJSONObject(i);
PosterPath = MovieData.getString(TMDB_PATH);
PostersPathsArray.add(i,BASIC_URL+PosterPath);
}
return PostersPathsArray;
}
private final String LOG_TAG = MoviesFragment.class.getSimpleName();
@Override
protected ArrayList<String> doInBackground(String... params) {
HttpURLConnection urlConnection = null;
String MoviesData = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
System.out.println("Empty Json");
return null;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line + "\n");
}
if (buffer.length() == 0) {
return null;
}
MoviesData = buffer.toString();
Log.v(LOG_TAG, "Movies string: " + MoviesData);
} catch (IOException e) {
Log.e(LOG_TAG, "Error ", e);
return null;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
Log.e(LOG_TAG, "Error closing stream", e);
}
}
}
try {
return getPostersURLFromJson(MoviesData);
} catch (JSONException e) {
Log.e(LOG_TAG, e.getMessage(), e);
e.printStackTrace();
}
// This will only happen if there was an error getting or parsing the forecast.
return null;
}
@Override
protected void onPostExecute(ArrayList<String> strings) {
super.onPostExecute(strings);
for(int i=0 ; i<strings.size() ; i++){
System.out.println(strings.get(i));
}
moviesAdapter = new MoviesGridAdapter(strings,getActivity());
//moviesAdapter.notifyDataSetChanged();
postersAdapterlistener.listen(moviesAdapter);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment