java - Java Android Studio 无法将 ArrayList 从另一个类发送到 MainActivity
问题描述
我尝试将数据从我的对象添加到 ArrayList 但它不起作用。
此代码从 JSON 读取数据并像这样添加到 MySQLConnect.java 中的 ArrayList。
private ComputerService computerservice;
public static ArrayList<ComputerService> computerServicesArrayList = new ArrayList<>();
private String URL = "http://10.200.100.10/", GET_URL = "android/get_data.php";
public MySQLConnect(){
main = null;
}
public MySQLConnect(Activity mainA){
main = mainA;
}
public List<ComputerService> getData(){
String url = URL + GET_URL;
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showJSON(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(main, error.getMessage().toString(), LENGTH_LONG).show();
}
}
);
RequestQueue requestQueue = Volley.newRequestQueue(main.getApplicationContext());
requestQueue.add(stringRequest);
return computerServicesArrayList;
}
public void showJSON(String response){
String data_mysql = "";
computerServicesArrayList.clear();
try{
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray("data");
for(int i=0; i < result.length(); i++){
JSONObject collectData = result.getJSONObject(i);
String id = collectData.getString("id");
String type = collectData.getString("type");
String address = collectData.getString("address");
computerservice = new ComputerService(id, type, address);
computerServicesArrayList.add(computerservice);
}
System.out.println("Size in class MySQLConnect");
System.out.println(computerServicesArrayList.size());
} catch (JSONException e) {
e.printStackTrace();
}
}
MainActivity.java 我这样显示 computerServicesArrayList.size() 。
public static List<ComputerService> computerServicesArrayList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mySQLConnect = new MySQLConnect(MainActivity.this);
update();
}
public void update(){
computerServicesArrayList = mySQLConnect.getData();
System.out.println("Size in MainActivity");
System.out.println(computerServicesArrayList.size());
}
输出显示如下。
Size in MainActivity
0
Size in class MySQLConnect
83
从代码中我可以打印 computerServicesArrayList.size() 结果是 83 但是当我从 MainActivity 打印时为什么它显示结果 0。如何解决它?
解决方案
我不Volley
详细了解框架/类。但看起来您正在创建一个异步请求。因此,您的休息请求被发送,并且当响应进入您的showJSON()
方法时被调用。
但是您立即返回computerServicesArrayList
结果,该结果是空的,因为您还没有回复。这也是为什么您的打印语句在MainActivity
您的方法打印之前执行的原因showJSON
。
如果你想等待休息响应,你必须做同步请求。
也许这可以帮助您更多地了解 Volley 和异步/同步请求:
但通常你会发送一个异步请求,当你得到响应时你会执行你的逻辑(更新字段,在数据库中存储一些东西,......)。
推荐阅读
- javascript - 自定义shopify购买按钮
- kotlin - 如何继承一个类并传递一个 PanacheRepository
- amazon-web-services - AWS Rekognition Video 的自定义模型
- pip - WSL 2 Ubuntu 20.04 中的名称服务器问题
- html - 引导表没有并排出现
- javascript - 使用 socket.io 和 mediastream api 在房间内的客户端之间发送实时音频聊天时遇到问题
- r - 通过 `...` 扩展 tidyverse 函数
- python - 不太确定 Python 上的 replace() 函数 - 为什么不将狗替换为猫?
- python - 从 cv2 捕获视频帧并异步上传到 azure blob
- laravel - 如何使用 datepicker 插入日期