Created
January 26, 2017 19:41
-
-
Save the-dagger/1d21ec18ae99dfc6dbe2acbd76493065 to your computer and use it in GitHub Desktop.
PopularMovies
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.example.news.androidp1; | |
import android.content.Intent; | |
import android.os.AsyncTask; | |
import android.support.v4.app.LoaderManager; | |
import android.support.v4.content.AsyncTaskLoader; | |
import android.support.v4.content.Loader; | |
import android.support.v4.text.TextUtilsCompat; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.support.v7.widget.GridLayoutManager; | |
import android.support.v7.widget.LinearLayoutManager; | |
import android.support.v7.widget.RecyclerView; | |
import android.text.TextUtils; | |
import android.util.Log; | |
import android.view.Menu; | |
import android.view.MenuInflater; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.widget.ProgressBar; | |
import android.widget.Toast; | |
import org.json.JSONArray; | |
import org.json.JSONException; | |
import org.json.JSONObject; | |
import java.io.BufferedReader; | |
import java.io.InputStreamReader; | |
import java.net.HttpURLConnection; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
import java.util.ArrayList; | |
import java.util.List; | |
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<String> { | |
private static final String TAG = "RecyclerViewExample"; | |
private List<MovieItem> movieList; | |
private RecyclerView mRecyclerView; | |
private MyRecyclerViewAdapter adapter; | |
private ProgressBar progressBar; | |
String key = ""; | |
private static final int MOVIE_LOADER_ID = 0; | |
private static final String QUERY_URL_EXTRA = "query"; | |
Integer result = 0; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); | |
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); | |
progressBar = (ProgressBar) findViewById(R.id.progress_bar); | |
String url = "https://api.themoviedb.org/3/movie/upcoming?api_key=" + key; | |
Bundle queryBundle = new Bundle(); | |
queryBundle.putString(QUERY_URL_EXTRA, url); | |
// new DownloadTask().execute(url); | |
LoaderManager loaderManager = getSupportLoaderManager(); | |
Loader<String> movieLoader = loaderManager.getLoader(MOVIE_LOADER_ID); | |
if (movieLoader == null) { | |
Log.e("InitLoader","true"); | |
loaderManager.initLoader(MOVIE_LOADER_ID, queryBundle, this).forceLoad(); | |
} else { | |
loaderManager.restartLoader(MOVIE_LOADER_ID, queryBundle, this); | |
} | |
} | |
@Override | |
public Loader<String> onCreateLoader(int id, final Bundle args) { | |
return new AsyncTaskLoader<String>(this) { | |
@Override | |
protected void onStartLoading() { | |
if (args == null) { | |
Log.e("args","null"); | |
return; | |
} | |
Log.e("onStartLoading","true"); | |
progressBar.setVisibility(View.VISIBLE); | |
} | |
@Override | |
public String loadInBackground() { | |
String movieUrl = args.getString(QUERY_URL_EXTRA); | |
Log.e("MovieURL",movieUrl); | |
if (movieUrl == null || TextUtils.isEmpty(movieUrl)) { | |
return null; | |
} | |
try { | |
URL newUrl = new URL(movieUrl); | |
HttpURLConnection urlConnection; | |
urlConnection = (HttpURLConnection) newUrl.openConnection(); | |
int statusCode = urlConnection.getResponseCode(); | |
if (statusCode == 200) { | |
BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); | |
StringBuilder response = new StringBuilder(); | |
String line; | |
while ((line = r.readLine()) != null) { | |
response.append(line); | |
} | |
String resp = response.toString(); | |
try { | |
JSONObject response1 = new JSONObject(resp); | |
JSONArray posts = response1.optJSONArray("results"); | |
movieList = new ArrayList<>(); | |
for (int i = 0; i < posts.length(); i++) { | |
JSONObject post = posts.optJSONObject(i); | |
MovieItem item = new MovieItem(); | |
item.setThumbnail(post.optString("poster_path")); | |
item.setTitle(post.optString("title")); | |
item.setRelease_Date(post.optString("release_date")); | |
item.setPlot(post.optString("overview")); | |
item.setVote(post.optString("vote_average")); | |
movieList.add(item); | |
} | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} | |
result = 1; | |
} else { | |
result = 0; | |
} | |
} catch (Exception e) { | |
Log.d(TAG, e.getLocalizedMessage()); | |
return null; | |
} | |
return movieUrl; | |
} | |
}; | |
} | |
public void onLoadFinished(Loader<String> loader, String data) { | |
progressBar.setVisibility(View.GONE); | |
Log.e("OnLoadFinished", "true"); | |
if (result == 1) { | |
adapter = new MyRecyclerViewAdapter(MainActivity.this, movieList); | |
mRecyclerView.setAdapter(adapter); | |
adapter.setOnItemClickListener(new OnItemClickListener() { | |
@Override | |
public void onItemClick(MovieItem item) { | |
Intent intent = new Intent(MainActivity.this, DetailsActivity.class); | |
intent.putExtra("title", item.getTitle()); | |
intent.putExtra("image", item.getThumbnail()); | |
intent.putExtra("releasedate", item.getRelease_date()); | |
intent.putExtra("plot", item.getPlot()); | |
intent.putExtra("vote", item.getVote()); | |
startActivity(intent); | |
} | |
}); | |
} else { | |
Toast.makeText(MainActivity.this, "Failed to fetch data!", Toast.LENGTH_SHORT).show(); | |
} | |
} | |
public void onLoaderReset(Loader<String> loader) { | |
} | |
public boolean onCreateOptionsMenu(Menu menu) { | |
MenuInflater inflater = getMenuInflater(); | |
inflater.inflate(R.menu.main, menu); | |
return true; | |
} | |
public boolean onOptionsItemSelected(MenuItem item) { | |
switch (item.getItemId()) { | |
case R.id.popular: | |
String url = "https://api.themoviedb.org/3/movie/popular?api_key=" + key; | |
// new DownloadTask().execute(url); | |
return true; | |
case R.id.rating: | |
String url1 = "https://api.themoviedb.org/3/movie/top_rated?api_key=" + key; | |
// new DownloadTask().execute(url1); | |
default: | |
return super.onOptionsItemSelected(item); | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment