gpt4 book ai didi

java - Android:动态填充来自服务器的微调器数据

转载 作者:行者123 更新时间:2023-12-02 00:15:37 26 4
gpt4 key购买 nike

我是安卓新手。如何从服务器数据动态填充微调器。

所以我正在尝试将数据从服务器填充到我的微调器中。我的 JSON 是

{"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"}

现在我试图只获取“名称”: A 和 B ,当我选择它们中的每一个时,将会有方向和位置的信息。提前致谢!

编辑

所以基本上这是我的航点的弹出窗口。我正在努力修复我的方法部分的“(String json)”。

public class Pop extends Activity {

private SubscribedData<WaypointList> waypointlistData;
private RosbridgeListener rosbridge;
Spinner spin;
String json;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popup);

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


}

}

最佳答案

微调器中的每一项都表示一个“WayPoint”。所以第一步是为 WayPoint 创建模型类。

class WayPoint {
String name;
Pose pose;

@NonNull
@Override
public String toString() {
return name;
}
}

class Pose {
Position position;
Orientation orientation;
}

class Position {
double x, y, z;
}

class Orientation {
double x, y, z, w;
}

其次,编写一个方法来解析json字符串到航点列表

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.getDouble("x");
position.y = positionJsonObject.getDouble("y");
position.z = positionJsonObject.getDouble("z");

// Parse orientation from pose.
JSONObject orientationJsonObject = poseJsonObject.getJSONObject("orientation");
Orientation orientation = new Orientation();
orientation.x = orientationJsonObject.getDouble("x");
orientation.y = orientationJsonObject.getDouble("y");
orientation.z = orientationJsonObject.getDouble("z");
orientation.w = orientationJsonObject.getDouble("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;
}

最后将它们放入MainActivity类中。

public class MainActivity extends AppCompatActivity {

private Spinner wayPointSpinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wayPointSpinner = findViewById(R.id.spinner_way_point);

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

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

关于java - Android:动态填充来自服务器的微调器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58090172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com