首先执行服务器调用,然后执行下一行代码

时间:2018-10-24 07:45:32

标签: java android android-volley

我想先执行文本为“ 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
     }
}

2 个答案:

答案 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
                 });
}