so The issue I am facing is that I have a listView
that contains a switch and some additional data that is in JSON
. I need to be able to send the position of the switch (on or off) and one part of the json
, the deviceID and then send them to the database. As I'm new at this kind of thing I'm not sure how to do it or even where to do it.
any help would be greatly appreciated,
here is my front end
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:gravity="center_vertical|center_horizontal">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/device_type"
android:src="@mipmap/ic_launcher"
android:layout_gravity="center_vertical" />
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.77">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="device_name"
android:id="@+id/device_name" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="deviceID"
android:id="@+id/device_id"
android:layout_weight="1" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="type"
android:id="@+id/type"
android:layout_weight="1" />
</LinearLayout>
<Switch
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text="New Switch"
android:id="@+id/switch1"
android:layout_gravity="center_vertical" />
</LinearLayout>
this is my population of each list item,
package mmu.tom.linkedviewproject;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by Tom on 08/02/2016.
*/
public class GetAllDeviceListViewAdapter extends BaseAdapter {
private JSONArray dataArray;
private Activity activity;
private String state;
private static LayoutInflater inflater = null;
public GetAllDeviceListViewAdapter(JSONArray jsonArray, Activity a){
this.dataArray = jsonArray;
this.activity = a;
inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return this.dataArray.length();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// set up the convert view if it's null
ListCell cell;
if(convertView == null){
convertView = inflater.inflate(R.layout.get_all_devices_list_view_cell,null);
cell = new ListCell();
cell.deviceName = (TextView) convertView.findViewById(R.id.device_name);
cell.deviceId = (TextView) convertView.findViewById(R.id.device_id);
cell.type = (TextView) convertView.findViewById(R.id.type);
cell.aSwitch = (Switch) convertView.findViewById(R.id.switch1);
cell.typeImg = (ImageView) convertView.findViewById(R.id.device_type);
convertView.setTag(cell);
}
else{
cell=(ListCell) convertView.getTag();
}
// changes the cell data here
try{
JSONObject jsonObject = this.dataArray.getJSONObject(position);
cell.deviceName.setText(jsonObject.getString("name"));
cell.deviceId.setText(" " + jsonObject.getString("deviceID"));
cell.type.setText(" " + jsonObject.getString("type"));
String device = jsonObject.getString("type");
if(device.equals("Light")){
cell.typeImg.setImageResource(R.mipmap.ic_lights_on);
}
else if(device.equals("Lock")){
cell.typeImg.setImageResource(R.mipmap.ic_lock_open_black_24dp);
}
// remember to set the image to type in future
}
catch(JSONException e){
e.printStackTrace();
}
return convertView;
}
private class ListCell{
private TextView deviceName;
private TextView deviceId;
private TextView type;
private ImageView typeImg;
private Switch aSwitch;
// remember to set the image to type in future
}
}
The class where the list is shown
package mmu.tom.linkedviewproject;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ListView;
import org.json.JSONArray;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "ShowDevice";
private ListView GetAllDevicesListView;
private JSONArray jsonArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, " OPened this");
ImageButton button1 = (ImageButton) findViewById(R.id.image_button_new);
button1.setOnClickListener(new View.OnClickListener() {
Class ourClass;
public void onClick(View v) {
Intent i;
i = new Intent(MainActivity.this, DeviceDetailsActivity.class);
startActivity(i);
}
});
this.GetAllDevicesListView = (ListView) this.findViewById(R.id.GetAllDevicesListView);
new GetAllDevicesTask().execute(new ApiConnector());
}
public void setListAdapter(JSONArray jsonArray){
this.jsonArray = jsonArray;
this.GetAllDevicesListView.setAdapter((new GetAllDeviceListViewAdapter(jsonArray, this)));
}
private class GetAllDevicesTask extends AsyncTask<ApiConnector,Long,JSONArray>
{
@Override
protected JSONArray doInBackground(ApiConnector... params) {
// it is executed on Background thread
return params[0].GetAllDevicesState();
}
@Override
protected void onPostExecute(JSONArray jsonArray) {
setListAdapter(jsonArray);
}
}
}
and finally here is my database connection
package mmu.tom.linkedviewproject;
import android.util.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.IOException;
public class ApiConnector {
public JSONArray GetAllDevicesState() {
// URL for getting all customers
String url = "http://52.88.194.67:8080/IOTProjectServer/getDevice";
// Get HttpResponse Object from url.
// Get HttpEntity from Http Response Object
HttpEntity httpEntity = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient(); // Default HttpClient
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
httpEntity = httpResponse.getEntity();
} catch (ClientProtocolException e) {
// Signals error in http protocol
e.printStackTrace();
//Log Errors Here
} catch (IOException e) {
e.printStackTrace();
}
// Convert HttpEntity into JSON Array
JSONArray jsonArray = null;
if (httpEntity != null) {
try {
String entityResponse = EntityUtils.toString(httpEntity);
Log.e("Entity Response : ", entityResponse);
jsonArray = new JSONArray(entityResponse);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return jsonArray;
}
public JSONArray GetDeviceDetails(int DeviceID) {
// URL for getting all customers
String url = "http://52.88.194.67:8080/IOTProjectServer/registerDevice?";
// Get HttpResponse Object from url.
// Get HttpEntity from Http Response Object
HttpEntity httpEntity = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient(); // Default HttpClient
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
httpEntity = httpResponse.getEntity();
} catch (ClientProtocolException e) {
// Signals error in http protocol
e.printStackTrace();
//Log Errors Here
} catch (IOException e) {
e.printStackTrace();
}
// Convert HttpEntity into JSON Array
JSONArray jsonArray = null;
if (httpEntity != null) {
try {
String entityResponse = EntityUtils.toString(httpEntity);
Log.e("Entity Response : ", entityResponse);
jsonArray = new JSONArray(entityResponse);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return jsonArray;
}
}