Android:动态显示数据到我的微调器

我目前陷入了如何动态地向微调器显示数据的困境。我正在使用 websocket 接收数据并在我的 UI 线程上运行它,我的问题是我的微调器中没有显示数据列表。



红糖糍粑
浏览 64回答 1
1回答

GCT1015

您应该创建一个ArrayList如下所示的。ArrayList<String> spinnerArray = new ArrayList<String>();Spinner 与 Spinner 相关联Adapter view,因此要在 Spinner 中填充数据,您需要使用adapter. Anadapter是UI组件和数据源之间的桥梁,帮助我们向UI组件填充数据。只需您可以像下面一样使用ArrayAdapter(要使用自定义适配器,请参阅此)ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>&nbsp; &nbsp; &nbsp; &nbsp; (this, android.R.layout.simple_spinner_item,&nbsp; &nbsp; &nbsp; &nbsp;spinnerArray);之后,您必须将您的设置设置adapter为spinner如下所示。spin.setAdapter(spinnerArrayAdapter);&nbsp;示例:您的代码应如下所示。ArrayList<String> spinnerArray;ArrayAdapter<String> spinnerArrayAdapter@Overrideprotected void onCreate(Bundle savedInstanceState) {&nbsp; &nbsp; super.onCreate(savedInstanceState);&nbsp; &nbsp; setContentView(R.layout.popup);&nbsp; &nbsp; WayPointData = new SubscribedData<>();&nbsp; &nbsp; final Type WayPointType = new TypeToken<SubscribedData<WayPoint>>() {&nbsp; &nbsp; }.getType();&nbsp; &nbsp; // spinner element&nbsp; &nbsp; spin = (Spinner) findViewById(R.id.spinner);&nbsp; &nbsp; spinnerArray = new ArrayList<String>();&nbsp; &nbsp; spinnerArrayAdapter = new ArrayAdapter<String>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (this, android.R.layout.simple_spinner_item,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;spinnerArray);&nbsp; &nbsp; spin.setAdapter(spinnerArrayAdapter);&nbsp; &nbsp; rosbridge = new RosbridgeListener("ws://10.24.204.231:9090");&nbsp; &nbsp; rosbridge.setOnDataReceivedListener(new RosbridgeMessageListener() {&nbsp; &nbsp; &nbsp; &nbsp; /**&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* a running thread that when the connection is made the data of the topic will serialize and deserialized java objects&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* to (and from) JSON.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param msg&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onDataReceived(final String msg) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; runOnUiThread(&nbsp; new Runnable() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WayPointData = new Gson().fromJson(msg,WayPointType);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // modify below lines like&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONObject mainObject = new JSONObject(msg); // add msg in JSONObject parameter&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONObject msgObject = mainObject.getJSONObject("msg"); // get msgObject from main object&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONArray wayPointJsonArray = msgObject.getJSONArray("waypoints"); // get wayPointJsonAarry from msg object&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < wayPointJsonArray.length(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONObject wayPointJsonObject = wayPointJsonArray.getJSONObject(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Parse name&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String name = wayPointJsonObject.getString("name");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WayPoint wayPoint = new WayPoint();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wayPoint.name = name;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// here you have to add name to your spinner array&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;spinnerArray.add(name)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// After all your data added to arraylist you should notify adapter that data set changed&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;spinnerArrayAdapter.notifyDataSetChanged();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (Exception e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /** a msg that will display once the data is received **/&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d("B9T", String.format("Received data: %s", msg));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (Exception e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp; spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onItemSelected(AdapterView<?> parent, View view, int p, long id) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WayPoint wayPoint = (WayPoint) parent.getItemAtPosition(p);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onNothingSelected(AdapterView<?> parent) {&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp; /** a set of the waypoints popup window **/&nbsp; &nbsp; DisplayMetrics dm = new DisplayMetrics();&nbsp; &nbsp; getWindowManager().getDefaultDisplay().getMetrics(dm);&nbsp; &nbsp; int width = dm.widthPixels;&nbsp; &nbsp; int height = dm.heightPixels;&nbsp; &nbsp; getWindow().setLayout((int) (width * .6), (int) (height * .6));&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java