gpt4 book ai didi

android - 无法在 Spinner Android 上选择 mysql 数据

转载 作者:行者123 更新时间:2023-11-29 21:46:55 25 4
gpt4 key购买 nike

我已经使用了 Spinner 并在 mysql 中有数据库,现在我想从 Android 中的 Spinner 上的数据库检索数据或名字,我可以在 Spinner 上显示数据,但是当我选择其中一个时,Spinner 变为空白(数据未选择)

但是当我添加时

 ar.add("");

所选项目可以显示在微调器中。

任何人都可以帮助修复我的代码。

非常感谢 --- terima kasih :)

这是我的代码:

package com.app.example.mysqltest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

TextView result;
RequestQueue requestQueue;

String showUrl = "http://10.10.10.1/trial/mysql/showStudent.php";
ArrayList<String> ar = new ArrayList<String>();



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

result = (TextView) findViewById(R.id.result);

requestQueue = Volley.newRequestQueue(getApplicationContext());

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, showUrl, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {

try {
JSONArray students = response.getJSONArray("students");

for (int i = 0; i < students.length(); i++ ){
JSONObject student = students.getJSONObject(i);

String firstname = student.getString("firstname");
ar.add(firstname);

}

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, ar);
adapter.notifyDataSetChanged();

} catch (JSONException e){
e.printStackTrace();
}

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println(error.getMessage());
}
});
requestQueue.add(jsonObjectRequest);




**//ar.add("");**


Spinner dropdown = (Spinner)findViewById(R.id.planets_spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, ar);
dropdown.setAdapter(adapter);



}

}

最佳答案

这是一个非常著名的问题,您尝试异步获取数据,但在收到数据后,您没有通过 notifyDataSetChanged 更新到适配器。在 for 循环后尝试:adapter.notifyDataSetChanged()像这样:

Spinner dropdown = (Spinner)findViewById(R.id.planets_spinner);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, ar);
dropdown.setAdapter(adapter);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, showUrl, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray students = response.getJSONArray("students");

for (int i = 0; i < students.length(); i++ ){
JSONObject student = students.getJSONObject(i);

String firstname = student.getString("firstname");
ar.add(firstname);
}
// Just 1 LOC
adapter.notifyDataSetChanged();

} catch (JSONException e){
e.printStackTrace();
}

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println(error.getMessage());
}
});
requestQueue.add(jsonObjectRequest);

关于android - 无法在 Spinner Android 上选择 mysql 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034099/

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