Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Displaying data to my spinner dynamically

Tags:

java

android

I'm currently stuck on how I'm going to display data to my spinner dynamically. I am using websocket to receive data and run it on my UI thread my problem is that there is no list of data showing in my spinner.

like image 990
Rex John Mabunga Avatar asked Apr 22 '26 03:04

Rex John Mabunga


1 Answers

You Should Create an ArrayList like the following.

ArrayList<String> spinnerArray = new ArrayList<String>();

Spinner is associated with Adapter view so to fill the data in spinner you need to use one of the adapter. An adapter is a bridge between UI component and data source that helps us to fill data in UI component.

simply you can use ArrayAdapter like below (to use a custom adapter see this)

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
        (this, android.R.layout.simple_spinner_item,
       spinnerArray);

After that, you have to set your adapter to your spinner like the following.

spin.setAdapter(spinnerArrayAdapter); 

EXAMPLE: Your code should be like following.

ArrayList<String> spinnerArray;
ArrayAdapter<String> spinnerArrayAdapter
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.popup);

    WayPointData = new SubscribedData<>();
    final Type WayPointType = new TypeToken<SubscribedData<WayPoint>>() {
    }.getType();


    // spinner element
    spin = (Spinner) findViewById(R.id.spinner);
    spinnerArray = new ArrayList<String>();
    spinnerArrayAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item,
           spinnerArray);
    spin.setAdapter(spinnerArrayAdapter);

    rosbridge = new RosbridgeListener("ws://10.24.204.231:9090");
    rosbridge.setOnDataReceivedListener(new RosbridgeMessageListener() {

        /**
         * a running thread that when the connection is made the data of the topic will serialize and deserialized java objects
         * to (and from) JSON.
         * @param msg
         */
        @Override
        public void onDataReceived(final String msg) {
            try {
                runOnUiThread(  new Runnable() {
                    @Override
                    public void run() {
                        try {
                            WayPointData = new Gson().fromJson(msg,WayPointType);
                            // modify below lines like
                            JSONObject mainObject = new JSONObject(msg); // add msg in JSONObject parameter
                            JSONObject msgObject = mainObject.getJSONObject("msg"); // get msgObject from main object
                            JSONArray wayPointJsonArray = msgObject.getJSONArray("waypoints"); // get wayPointJsonAarry from msg object
                            for (int i = 0; i < wayPointJsonArray.length(); i++) {
                                JSONObject wayPointJsonObject = wayPointJsonArray.getJSONObject(i);
                                // Parse name
                                String name = wayPointJsonObject.getString("name");
                                WayPoint wayPoint = new WayPoint();
                                wayPoint.name = name;
                                
                               // here you have to add name to your spinner array
                               spinnerArray.add(name)
                            }
                           // After all your data added to arraylist you should notify adapter that data set changed
                           spinnerArrayAdapter.notifyDataSetChanged();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
                });

                /** a msg that will display once the data is received **/
                Log.d("B9T", String.format("Received data: %s", msg));
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    });


    spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int p, long id) {
            WayPoint wayPoint = (WayPoint) parent.getItemAtPosition(p);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });

    /** a set of the waypoints popup window **/
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    int width = dm.widthPixels;
    int height = dm.heightPixels;

    getWindow().setLayout((int) (width * .6), (int) (height * .6));


  }
}
like image 80
Jakir Hossain Avatar answered Apr 24 '26 17:04

Jakir Hossain



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!