मूल रूप से मैं एक आंतरिक वर्ग से एक स्थिर चर को संशोधित करने की कोशिश कर रहा हूं और फिर मैं उस स्थिर चर को पढ़ना चाहता हूं लेकिन इसे ठीक से सेट नहीं किया जा रहा है (जो मैंने पढ़ा है, समस्या यह हो सकती है कि प्रोग्राम एकाधिक धागे में चल रहा है और थ्रेड जो स्थिर मान पढ़ रहा है उसे अपडेट नहीं मिल सकता है और केवल कैश पढ़ा जा सकता है?) मैंने अपने स्थिर चर को अस्थिर पर सेट करने का प्रयास किया लेकिन इसका कोई प्रभाव नहीं पड़ा।

मुख्य गतिविधि ->

ApiManager.evaluateResponse(responseLoginCall, MainActivity.this);

    if(ApiManager.isExecutionSuccessful) {
        Toast.makeText(this, "We are in", Toast.LENGTH_SHORT).show();
    }

एपीमैनेजर ->

public class ApiManager  {

public static volatile boolean isExecutionSuccessful = false;

public static void evaluateResponse(Call<AuthResponse> responseCall, Activity activity) {
    responseCall.enqueue(new Callback<AuthResponse>() {
        @Override
        public void onResponse(@NotNull Call<AuthResponse> call, @NotNull Response<AuthResponse> response) {
            if(response.isSuccessful()) {
                ApiManager.isExecutionSuccessful = true;
            } ...
    });

इस उदाहरण में isExecutionSucessful गलत है, भले ही वह ApiManager.isExecutionSuccessful = true; से गुजरा हो

0
Delsh 19 मार्च 2020, 07:11

1 उत्तर

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

responseCall.enqueue() अतुल्यकालिक रूप से अनुरोध भेजता है और इसकी प्रतिक्रिया के कॉलबैक को सूचित करता है, इसलिए ApiManager.evaluateResponse(responseLoginCall, MainActivity.this) को अनुरोध पूरा होने से पहले responseCall.enqueue() कहा गया था।

मेरा सुझाव है कि responseCall.execute() फ़ंक्शन के साथ एक सिंक्रोनस कॉल करें।

2
donquih0te 10 जिंदा 2021, 08:09