【问题标题】:question on Volley request Android studio关于 Volley request Android studio 的问题
【发布时间】:2021-12-26 08:34:40
【问题描述】:

我只是想了解为什么System.out.println("the number test is "+test); 在这种情况下不返回 3 而是返回 0。它是否与截击请求流有关?谢谢。如果我实际上将系统 println 放在另一个不是 oncreate 的方法中,比如在按钮 on-click 方法中,那么它将打印出 3 这就是我想要的

package com.app.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {
    RequestQueue queue;
    int test =0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loadData();

        System.out.println("the number test is "+test);
    }

    public void loadData()
    {

        queue= Volley.newRequestQueue(this);

        String url =some json url with a json array;
        JsonObjectRequest request  = new JsonObjectRequest(Request.Method.GET,url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray jsonArray = response.getJSONArray(name of json array);

                    for (int i=0;i<3;i++){
                        test=test+1;
                    }
                } catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        queue.add(request);

    }

}

【问题讨论】:

    标签: android json android-volley jsonobjectrequest


    【解决方案1】:

    Volley 请求是异步的,这意味着响应侦听器中的代码可能会在稍后执行,而不是立即执行。但是您正在立即打印。您甚至在设置之前就打印了价值。去掉print语句,移到:

    @Override
    public void onResponse(JSONObject response) {
        try {
            JSONArray jsonArray = response.getJSONArray(name of json array);
    
            for (int i=0;i<3;i++){
                test=test+1;
            }
            here >>>>>>> System.out.println("the number test is "+test);
        } catch (JSONException e){
            e.printStackTrace();
        }
    }
    

    【讨论】:

    • 非常感谢!
    • 如果这解决了您的问题,请将其标记为已接受 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多