如何将从一个 activity 调用的 volley POST 请求的响应发送到 android 中的另一个

How to send response of a volley POST request called from one activity to another in android

要求: 在 Android 应用程序代码中,在 MainActivity 中,我想通过 Volley 调用 REST POST API,然后传递 JSON 响应,因为它在下一个Activity。但是通过的响应是空白的。代码是:

请注意

System.out.println(globalOutput); //这不会打印任何东西

public class MainActivity extends AppCompatActivity {
    public static final String LOGIN_RESULT = "com.example.awgpusers2.loginResult";
    static String globalOutput;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void login(View view) throws Exception {
        EditText emailEditText = findViewById(R.id.editTextTextEmailAddress2);
        EditText phoneEditText = findViewById(R.id.editTextPhone2);
        EditText passwordEditText = findViewById(R.id.editTextTextPassword);

        String emailAddress = emailEditText.getText().toString();
        String phone = phoneEditText.getText().toString();
        String password = passwordEditText.getText().toString();
        
        makePostCall(emailAddress, phone, password, new VolleyCallback() {
            @Override
            public void onSuccess(String result) {
                System.out.println("result " + result);
                globalOutput = result;

                System.out.println("globalOutput " + globalOutput);
                           }
        });
        System.out.println(globalOutput); //THIS DOESN'T PRINT ANYTHING
        
        Intent intent = new Intent(this, LoginNextActivity.class);
        intent.putExtra(LOGIN_RESULT, globalOutput);
        startActivity(intent);
    }

    void makePostCall(String emailAddress, String phone, String password, final VolleyCallback callback) throws Exception {
        //String globalOutput;
        String postUrl = "http://18.188.180.148:8080/auth/login";
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        JSONObject postData = new JSONObject();
        try {
            postData.put("email", emailAddress);
            postData.put("password", password);
            postData.put("phoneNumber", phone);

        } catch (JSONException e) {
            e.printStackTrace();
        }

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, postUrl, postData, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                
                callback.onSuccess(response.toString());
            }
        }, new Response.ErrorListener() {
   ........................
     });

        requestQueue.add(jsonObjectRequest);

    }
}

请帮忙

您的 System.out.println 在 Volley returns 响应之前执行。 Volley 的 enqueue 方法是异步的,即你无法准确知道它何时会被执行。

移动

System.out.println(globalOutput); //THIS DOESN'T PRINT ANYTHING
        
Intent intent = new Intent(this, LoginNextActivity.class);
intent.putExtra(LOGIN_RESULT, globalOutput);
startActivity(intent);

进入VolleyCallback的onSuccess方法

makePostCall()方法是异步函数。 所以需要在回调函数中处理。

public void login(View view) throws Exception {
    EditText emailEditText = findViewById(R.id.editTextTextEmailAddress2);
    EditText phoneEditText = findViewById(R.id.editTextPhone2);
    EditText passwordEditText = findViewById(R.id.editTextTextPassword);

    String emailAddress = emailEditText.getText().toString();
    String phone = phoneEditText.getText().toString();
    String password = passwordEditText.getText().toString();
    
    makePostCall(emailAddress, phone, password, new VolleyCallback() {
        @Override
        public void onSuccess(String result) {
            System.out.println("result " + result);
            globalOutput = result;

            System.out.println("globalOutput " + globalOutput);

            System.out.println(globalOutput); //THIS DOESN'T PRINT ANYTHING

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Intent intent = new Intent(MainActivity.this, LoginNextActivity.class);
                    intent.putExtra(LOGIN_RESULT, globalOutput);
                    startActivity(intent);
                }
            });
       }
    });
}