0

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;


}

}
Jamie Eltringham
  • 810
  • 3
  • 16
  • 25
GingerFish
  • 457
  • 3
  • 11
  • 26
  • If your issue is add some listeners to Views in this listView you can use [this](http://stackoverflow.com/questions/3851802/android-add-event-listeners-to-every-item-in-a-listview). You should add them in adapter. – RevakoOA Mar 01 '16 at 09:34
  • Thanks I'll have to try that later on after work! – GingerFish Mar 01 '16 at 09:46

0 Answers0