Created
March 15, 2016 15:21
-
-
Save AhmedBadrSayed/a1f09c6107b9f3a5a198 to your computer and use it in GitHub Desktop.
MoviesFragment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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