我想先执行文本为“ tex2”的Toast,然后执行文本为“ text1”的Toast,但是
在我的代码中,当我执行以下代码时,它以相反的顺序打印(我指的是具有相同结构的不同代码)。
(例如我想等待响应,然后执行下一个)
class A
{
public int onStartCommand(Intent intent, int flags, int startId)
{
getdatafromnet();
Toast.makeText(getApplicationContext(), "text1", Toast.LENGTH_LONG).show();
//..................code
}
void getdatafromnet()
{
//volley server call
stringRequest=new StringRequest(Request.Method.GET, url2,
new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
Toast.makeText(getApplicationContext(), "text2",Toast.LENGTH_LONG).show();
}
});
//....follwing volley parameters and calls
}
}
答案 0 :(得分:2)
如果要在服务器调用返回后执行某些操作。最好将代码放入onResponse方法中,或者从onResponse方法中调用函数。
答案 1 :(得分:1)
由于呼叫网络是异步的,因此无法获得正确的结果。 要对其进行处理,可以使用android.os.Handler。
例如;
class A
{
Handler m_handler = new Handler() {
@Override
public void handleMessage(Message inputMessage) {
switch (inputMessage.what) {
case 1:
getdatafromnet();
break;
case 2:
Toast.makeText(getApplicationContext(), "text1", Toast.LENGTH_LONG).show();
//..................code
break;
default:
super.handleMessage(inputMessage);
}
}
};
public int onStartCommand(Intent intent, int flags, int startId)
{
m_handler.sendEmptyMessage(1);
}
void getdatafromnet()
{
//volley server call
stringRequest=new StringRequest(Request.Method.GET, url2,
new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
Toast.makeText(getApplicationContext(), "text2",Toast.LENGTH_LONG).show();
m_handler.sendEmptyMessage(2);
}//..........follwing volley parameters and calls
});
}