【发布时间】:2023-03-09 14:50:01
【问题描述】:
我想要一个使用 Volley 库使用 REST API 的 Activity,同时在屏幕上显示自定义布局(以 XML 布局文件编写)。
所以我写了一个 Activity,它在它的 onCreate() 中像往常一样调用setContentView(R.layout.layout_file);。 之后,它通过 Volley 库使用 REST API(即构建 Volley 的 RequestQueue 对象,然后在其上调用 requestQueueObject.add(requestObject))。
(相关部分)代码如下。
问题在于,虽然从 REST API 下载数据,但使用 setContentView()(在 onCreate()之前 使用 REST Web 服务)未显示在屏幕上,并且屏幕保持空白。然后在那之后,在 XML 中定义的布局会瞬间显示出来,就像眨眼一样,然后下一个活动 AnotherActivity 开始。
从下一个 Activity 开始,如果我按下后退按钮,那么 XML 中设置的布局会显示在第一个 Activity 中。
我该如何解决这个问题?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
RequestQueue requestQueue = RequestQueueSingleton.getInstance(getApplicationContext()).getRequestQueue();
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
...
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
...
}
});
requestQueue.add(request);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
startActivity(new Intent(this, AnotherActivity.class));
}
【问题讨论】:
-
我认为这里的问题是因为您从
onCreate阶段内的主线程调用Thread.sleep(5000); -
@AleksandrMedvedev 不,这只是我添加的一项检查,以确保只要使用 REST API,从 XML 加载布局实际上就会延迟。
-
但是你为什么不在回调中开始你的活动呢?如果我没听错,您正在等待收到回复吗?
-
@once2go 没有具体原因。让我在删除
Thread.sleep()并将startActivity()调用移动到onResponse()回调后尝试运行它。
标签: android android-layout android-volley android-xml setcontentview