Android http请求同步与截击
我编写代码向http服务器发出请求:Android http请求同步与截击,android,Android,我编写代码向http服务器发出请求: public void reqCategory() { RequestQueue queue = Volley.newRequestQueue(this); String url = "http://myaddress/getdata.php"; StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener&l
public void reqCategory() {
RequestQueue queue = Volley.newRequestQueue(this);
String url = "http://myaddress/getdata.php";
StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Json Parse
try {
JSONArray jsonArray = new JSONArray(response);
catList.clear();
for (int i=0; i<jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
catList.add(jsonObject.getString("categoria"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error -> ", error.toString());
}
}) {
@Override
protected Map<String, String> getParams() { //nessun parametro
Map<String, String> params = new HashMap<String, String>();
//no param at moment
return params;
}
};
queue.add(postRequest);
}
这应该是用reqCategory()中的值填充列表catList,但是for循环不显示这些值,因为请求是asyncron
如何发出syncron请求,以便在reqCategory()调用后在catList中获得值,并可以查看循环中的值
谢谢。尝试对代码进行一些小的编辑
for (int i=0; i<jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String Temp = new
catList.add(new String(jsonObject.getString("categoria")));
}
for(int i=0;i在Android上不能有网络阻止UI线程。所有网络必须在单独的线程上,因此需要重构代码,使其类似于:
onCreate() {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comanda);
reqCategory();
}
其中reqCategory()
必须生成,即用于网络的AsyncTask。AsyncTask完成后,您可以在其onPostExecute()
中执行循环(或者在odInBackground()
中执行循环,如果您不需要触摸UI小部件)。什么是synchron request
?应请求,应用程序将等待直到请求结束。我认为。
for (int i=0; i<jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String Temp = new
catList.add(new String(jsonObject.getString("categoria")));
}
onCreate() {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comanda);
reqCategory();
}