Skip to content

Instantly share code, notes, and snippets.

@the-dagger
Created January 26, 2017 19:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save the-dagger/1d21ec18ae99dfc6dbe2acbd76493065 to your computer and use it in GitHub Desktop.
Save the-dagger/1d21ec18ae99dfc6dbe2acbd76493065 to your computer and use it in GitHub Desktop.
PopularMovies
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