Заполнение данных счетчика из JSON динамически - PullRequest
2 голосов
/ 01 октября 2019

Я новичок в программировании для Android, и у меня возникла проблема с моими кодами, поэтому в основном я хочу заполнить свои данные, поступающие с сервера, на мой счетчик. Моя проблема заключается в том, что я хочу настроить его динамически, чтобы всякий раз, когда сервер обновлялся, он делал то же с моим счетчиком.

Вот мой код:

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

/** publisher definition with its type of message**/
waypointlistData = new SubscribedData<>();
final Type waypointlistType = new TypeToken<SubscribedData<WaypointList>>() {
}.getType();


/** A method to parse a jsonstring to waypoint list **/
private List<Waypoint> getWayPointListFromJsonString(String json){
    List<Waypoint> wayPoints = new ArrayList<>();
    try {
        JSONObject jsonObject = new JSONObject(json);
        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");

            // Parse pose to get position and orientation;
            JSONObject poseJsonObject = wayPointJsonObject.getJSONObject("pose");

            // Parse position form pose
            JSONObject positionJsonObject = poseJsonObject.getJSONObject("position");
            Position position = new Position();
            position.x = positionJsonObject.getFloat("x");
            position.y = positionJsonObject.getFloat("y");
            position.z = positionJsonObject.getFloat("z");

            // Parse orientation from pose.
            JSONObject orientationJsonObject = poseJsonObject.getJSONObject("orientation");
            Orientation orientation = new Orientation();
            orientation.x = orientationJsonObject.getFloat("x");
            orientation.y = orientationJsonObject.getFloat("y");
            orientation.z = orientationJsonObject.getFloat("z");
            orientation.w = orientationJsonObject.getFloat("w");

            Pose pose = new Pose();
            pose.position = position;
            pose.orientation = orientation;

            Waypoint wayPoint = new Waypoint();
            wayPoint.name = name;
            wayPoint.pose = pose;
            wayPoints.add(wayPoint);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return wayPoints;
}

// This is the json string returned from server.
String jsonString = "{\"topic\": \"/waypoints\", \"msg\": {\"waypoints\": [{\"header\": {\"stamp\": {\"secs\": 0, \"nsecs\": 0}, \"frame_id\": \"map\", \"seq\": 0}, \"pose\": {\"position\": {\"y\": -140.901899144836, \"x\": 44.36469369653882, \"z\": 0.0}, \"orientation\": {\"y\": 0.0, \"x\": 0.0, \"z\": 0.5062775131960053, \"w\": 0.8623706161692133}}, \"name\": \"A\"}, {\"header\": {\"stamp\": {\"secs\": 0, \"nsecs\": 0}, \"frame_id\": \"map\", \"seq\": 0}, \"pose\": {\"position\": {\"y\": -102.30524463734227, \"x\": 51.282396271771304, \"z\": 0.0}, \"orientation\": {\"y\": 0.0, \"x\": 0.0, \"z\": 0.6926372547579506, \"w\": 0.721286096719859}}, \"name\": \"B\"}]}, \"op\": \"publish\"}";

// This will convert the json string to list of WayPoint
List<Waypoint> wayPoints = getWayPointListFromJsonString(jsonString);

// Create adapter for spinner
SpinnerAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, wayPoints);

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);

        // Process position here
        Position position = wayPoint.pose.position;

        // Process orientation here
        Orientation orientation = wayPoint.pose.orientation;
    }

    @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));


  }

Заранее спасибо!

...