сначала выполнить вызов сервера, затем следующую строку кода - PullRequest
0 голосов
/ 24 октября 2018

Я хочу сначала выполнить Toast с текстом «tex2», затем Toast с текстом «text1», но в моем коде он печатается в обратном порядке, когда я выполняю код (я имею в виду другой код с той же структурой) ниже.
(скажи, что я хочу дождаться ответа, затем выполнить следующее)

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 голосов
/ 24 октября 2018

Поскольку вызывающая сеть асинхронна, вы не можете получить правильный результат.Для его обработки можно использовать 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
                 });
}
0 голосов
/ 24 октября 2018

Если вы хотите, чтобы какая-либо операция выполнялась после возврата вызова сервера.Лучше поместить свой код в метод onResponse или вызвать функцию из метода onResponse.

...