आवश्यकता: एंड्रॉइड ऐप कोड में, मेनएक्टिविटी में, मैं वॉली के माध्यम से एक आरईएसटी पोस्ट एपीआई को कॉल करना चाहता हूं और फिर जेएसओएन प्रतिक्रिया पास करना चाहता हूं क्योंकि यह अगली गतिविधि में है। लेकिन जो जवाब पास हो जाता है वह खाली होता है। कोड है:

कृपया ध्यान दें कि

System.out.println (वैश्विक आउटपुट); // यह कुछ भी प्रिंट नहीं करता है

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

    }
}

कृपया सहायता कीजिए

1
grit639 13 जिंदा 2021, 15:18
उस intent को onSuccess में और globalOutput = result के ठीक नीचे ले जाएं
 – 
Jatin
13 जिंदा 2021, 15:27
इस विषय पर अधिक जानकारी यहां
 – 
a_local_nobody
13 जिंदा 2021, 15:43

2 जवाब

सबसे बढ़िया उत्तर

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);
                }
            });
       }
    });
}
2
Daniel.Wang 13 जिंदा 2021, 15:27
स्वागत है, कृपया मेरा उत्तर स्वीकार करें।
 – 
Daniel.Wang
13 जिंदा 2021, 15:40
वांग: मैंने कोशिश की, लेकिन मेरे पास ऐसा करने के लिए पर्याप्त अंक नहीं हैं। मैं इस समुदाय के लिए नया हूँ।
 – 
grit639
13 जिंदा 2021, 15:44
कोई बात नहीं। वैसे भी, मुझे आपकी मदद करने में खुशी हो रही है।
 – 
Daniel.Wang
13 जिंदा 2021, 15:46

वॉली द्वारा प्रतिक्रिया देने से पहले आपका System.out.println निष्पादित हो जाता है। वॉली की enqueue विधि अतुल्यकालिक है, यानी आप यह नहीं बता सकते कि इसे कब निष्पादित किया जाएगा।

कदम

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

वॉलीकॉलबैक की onSuccess विधि में

2
TimonNetherlands 13 जिंदा 2021, 15:26