有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想先执行文本为“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) 个答案

  1. # 1 楼答案

    如果希望在服务器调用返回后执行某些操作。最好将代码放在onResponse方法中,或者从onResponse方法中调用函数

  2. # 2 楼答案

    因为调用网络是异步的,所以无法得到正确的结果。 要处理它,您可以使用android。操作系统。处理程序

    比如,

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