Заполните данные в счетчик динамически - PullRequest
0 голосов
/ 02 октября 2019

В настоящее время я застрял на том, как я собираюсь отображать свои данные на мой счетчик. Так что в основном я использую Websocket для получения данных и запуска их в потоке пользовательского интерфейса, моя проблема в том, что в моем счетчике нет списка данных, отображаемых.

Вот мой код:

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


    /** an ID for the spinner **/
    spin = (Spinner) findViewById(R.id.spinner);

    final SpinnerAdapter adapter = new ArrayAdapter<String>(Pop.this, android.R.layout.simple_spinner_item);
    spin.setAdapter(adapter);

    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);
                            JSONObject jsonObject = new JSONObject();
                            JSONArray wayPointJsonArray = jsonObject.getJSONObject("msg").getJSONArray("waypoints");
                            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;

                            }
                        } 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.setAdapter(adapter);
    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) {
        }
    });

Спасибо всем, кто может мне помочь!

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Здесь я вижу, что вы не передаете json string в JSONObject, поэтому ваш главный JSON-объект является пустым json object.

Вы должны передать JSON string в JSONObjectпараметр, как показано ниже.

JSONObject jsonObject = new JSONObject(msg); // here you have to add your json string in JSONObject parameter

Надеюсь, он вам поможет.

0 голосов
/ 02 октября 2019

добавить массив при запуске вашего адаптера:

final SpinnerAdapter adapter = new ArrayAdapter<String>(Pop.this, android.R.layout.simple_spinner_item, yourStringArray);

, если вы внесете изменения позже (получите список от сервера), просто установите массив, который вы использовали ранее, с новыми данными и используйте adapter.notifyDataSetChanged()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...