package com.mobidev.httprequest;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.mobidev.httprequest.adapter.MyCustomAdapter;
import com.mobidev.httprequest.model.University;
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.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
/**
* Created by lawrence on 7/8/15.
*/
public class UniversitiesActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ProgressDialog mProgress;
private ListView listView;
private ArrayList<University> arrList = new ArrayList<University>();
private MyCustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_universities);
listView = (ListView) findViewById(R.id.lvUniversities);
listView.setOnItemClickListener(this);
if (isNetworkAvailable()) {
showProgress();
fetchDataFromRemoteServer();
} else {
/**
* android.R.id.content gives you the root element of a view, without having to know its actual name
*
* @see http://stackoverflow.com/questions/7776768/android-what-is-android-r-id-content-used-for
*/
Snackbar.make(findViewById(android.R.id.content), "Check your internet connectivity", Snackbar.LENGTH_SHORT).show();
}
}
private void fetchDataFromRemoteServer() {
new NetworkAsyncTask().execute("http://testing.mlab-training.devs.mobi/php_list_db_example/universities.php");
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView txtId = (TextView) view.findViewById(R.id.univesity_id);
System.out.println(txtId.getText());
}
/**
* @see http://developer.android.com/reference/android/os/AsyncTask.html
*/
private class NetworkAsyncTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... myUrl) {
try {
/**
* declare URL connection
*
* @see http://developer.android.com/reference/java/net/HttpURLConnection.html
*/
URL url = new URL(myUrl[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
// conn.setConnectTimeout(10000);//Sets the maximum time in milliseconds to wait while connecting.
// conn.setReadTimeout(15000);//Sets the maximum time to wait for an input stream read to complete before giving up.
conn.setRequestProperty("Accept", "application/json");
/**
* open InputStream to connection
*/
conn.connect();
InputStream in = conn.getInputStream();
int status = conn.getResponseCode();
StringBuilder stringBuilder = new StringBuilder();
switch (status) {
case 200:
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
reader.close();
return stringBuilder.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String result) {
// System.err.println(result);
try {
JSONObject response = new JSONObject(result);
JSONArray unisArray = response.getJSONArray("universities");
for (int i = 0; i < unisArray.length(); i++) {
JSONObject unisItem = unisArray.getJSONObject(i);
int id = unisItem.getInt("id");
String university_name = unisItem.getString("university_name");
String description = unisItem.getString("description");
University obj = new University(id, university_name, description);
arrList.add(obj);
adapter = new MyCustomAdapter(getApplicationContext(), arrList);
addToAdapter();
System.err.println(id + " " + university_name + " " + description);
}
} catch (JSONException e) {
e.printStackTrace();
}
stopProgress();
}
}
private Boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
}
private void addToAdapter() {
adapter = new MyCustomAdapter(getApplicationContext(), arrList);
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
}
private void showProgress() {
mProgress = ProgressDialog.show(UniversitiesActivity.this, "Please Wait",
"Accessing server...");
}
private void stopProgress() {
mProgress.cancel();
}
}