From 6ff1f0e0c45c11d0058a65c2aed8f3145fffa3cc Mon Sep 17 00:00:00 2001 From: ikarulus Date: Sun, 13 Jan 2019 20:44:35 +0100 Subject: [PATCH] implement list of rented bikes --- .../hochi/nextcompanion/MainActivity.java | 67 ++++++++++++++++++- .../hochi/nextcompanion/RequestHandler.java | 29 ++++---- app/src/main/res/layout/content_main.xml | 13 ++-- 3 files changed, 88 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/example/hochi/nextcompanion/MainActivity.java b/app/src/main/java/com/example/hochi/nextcompanion/MainActivity.java index 268c6bf..1eeedf2 100644 --- a/app/src/main/java/com/example/hochi/nextcompanion/MainActivity.java +++ b/app/src/main/java/com/example/hochi/nextcompanion/MainActivity.java @@ -8,11 +8,22 @@ import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.util.Log; import android.view.View; import android.view.Menu; import android.view.MenuItem; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; -public class MainActivity extends AppCompatActivity { +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Arrays; + +public class MainActivity extends AppCompatActivity implements AsyncTaskCallbacks { + private RequestHandler getBikesTask = null; @Override protected void onCreate(Bundle savedInstanceState) { @@ -45,6 +56,9 @@ public class MainActivity extends AppCompatActivity { Intent intent = new Intent(this, LoginActivity.class); startActivity(intent); } + else { + reloadBikeList(); + } } @Override @@ -69,4 +83,55 @@ public class MainActivity extends AppCompatActivity { return super.onOptionsItemSelected(item); } + protected void reloadBikeList() { + //get loginkey + SharedPreferences sharedPref = getSharedPreferences("persistence", MODE_PRIVATE); + String defaultValue = "nokey"; + String loginKey = sharedPref.getString("loginKey", defaultValue); + + String[] params = { + "apikey=", getString(R.string.apikey), + "loginkey=", loginKey + }; + + getBikesTask = new RequestHandler(this, "POST", + "api/getOpenRentals.json", params); + getBikesTask.execute((Void) null); + } + + @Override + public void onTaskComplete(String response) { + if (!response.isEmpty()) { + final ArrayList list = new ArrayList<>(); + try { + JSONObject jObject = new JSONObject(response); + JSONArray bikesArray = jObject.getJSONArray("rentalCollection"); + + for (int i = 0; i < bikesArray.length(); i++) { + String entry; + JSONObject bike = bikesArray.getJSONObject(i); + entry = "Bike " + bike.getString("bike") + + " with lock code " + bike.getString("code"); + list.add(entry); + } + Log.d("DEBUG", list.toString()); + } catch (Exception e) { + e.printStackTrace(); + } + final ListView listview = findViewById(R.id.listview); + final ArrayAdapter adapter = new ArrayAdapter<>(this, + android.R.layout.simple_list_item_1, list); + listview.setAdapter(adapter); + listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, final View view, int position, long id) { + //TODO: Return bike + } + + }); + } + else { + //TODO: implement error handling + } + } } diff --git a/app/src/main/java/com/example/hochi/nextcompanion/RequestHandler.java b/app/src/main/java/com/example/hochi/nextcompanion/RequestHandler.java index c7b2c51..c3a5fc0 100644 --- a/app/src/main/java/com/example/hochi/nextcompanion/RequestHandler.java +++ b/app/src/main/java/com/example/hochi/nextcompanion/RequestHandler.java @@ -15,10 +15,14 @@ import java.net.URLEncoder; public class RequestHandler extends AsyncTask { + private String mHTTPmethod; + private String mEndpoint; private AsyncTaskCallbacks callback; private String[] mCredentials; - RequestHandler(String[] credentials, AsyncTaskCallbacks act) { + RequestHandler(AsyncTaskCallbacks act, String HTTPmethod, String endpoint, String[] credentials) { + mHTTPmethod = HTTPmethod; + mEndpoint = endpoint; mCredentials = credentials; callback = act; } @@ -36,20 +40,21 @@ public class RequestHandler extends AsyncTask { HttpURLConnection connection = null; try { //Create connection - URL url = new URL("https://api.nextbike.net/api/login.json"); + URL url = new URL("https://api.nextbike.net/" + mEndpoint); connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", - "application/x-www-form-urlencoded"); + connection.setRequestMethod(mHTTPmethod); + if(mHTTPmethod.equals("POST")) { + connection.setRequestProperty("Content-Type", + "application/x-www-form-urlencoded"); - connection.setRequestProperty("Content-Length", "" + - Integer.toString(urlParameters.toString().getBytes().length)); - connection.setRequestProperty("Content-Language", "en-US"); - - connection.setUseCaches (false); - connection.setDoInput(true); - connection.setDoOutput(true); + connection.setRequestProperty("Content-Length", "" + + Integer.toString(urlParameters.toString().getBytes().length)); + connection.setRequestProperty("Content-Language", "en-US"); + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(true); + } //Send request DataOutputStream wr = new DataOutputStream ( connection.getOutputStream ()); diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 3fc2170..5505216 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -8,13 +8,10 @@ tools:context=".MainActivity" tools:showIn="@layout/activity_main"> - + + \ No newline at end of file