我将ProfileActivity设置为扩展到实现View.OnClickListener的AppCompatActivity。单击指定的按钮时,它会使用Volley获取JSON格式将StringRequest发送到URL,然后解析它,然后将其存储在另一个类中。在onClick上启动的下一个活动(myTabActivity)需要存储的数据。我需要让ProfileActivity等到在启动myTabActivity之前在ParseWorkOrderJSON.java中完成请求,解析和存储。有什么想法吗? 我也是Android新手。
以下是我的代码中的代码段:
IValueConverter
}
我正在尝试使用ProgressDialog,而请求,解析和存储正在发生,然后在完成所有操作后将其解除。只有这样才会加载下一个活动,即myTabActivity。 如果您想要一个ParseWorkOrderJSON片段,请在评论中说明。
答案 0 :(得分:3)
您无需放慢应用速度。您只需要更好地理解异步操作的实际运行方式。
某些操作(如HTTP请求)可能需要很长时间。如果您在主应用程序线程(即负责更新和绘制UI的线程)上执行它们,您的用户可能会遇到冻结的UI,无法响应的行为以及所有其他条形码。事实上,Android有一个内置机制来防止这种情况,如果一个应用程序需要太长时间来处理用户输入,它会尝试强行关闭它(可怕的ANR对话框)。
解决这个问题的方法是将那些繁重的操作从主线程中卸下来。然后你有另一个问题 - 你需要知道操作何时完成并做出相应的反应。这称为异步操作 - 它将在未来的某个时刻启动并返回结果。
您正在使用Volley - 一个为您完成所有这些工作的库 - 它创建一个工作线程并使用它来执行HTTP请求,为您提供回调以在请求完成时收到通知。
问题是,当您开始Volley请求时,您正在开始活动。此时仍然没有加载数据,也不会显示任何内容。在继续之前,您应该等待请求的完成。如何知道请求何时完成 - 这是调用onResponse()
方法的时间。要使一切正常,您应该移动代码以在那里开始第二个活动。这样您就可以确保数据已加载,然后您可以继续向用户显示数据。