मैं अपने प्रोजेक्ट में एंड्रॉइड एएसी लाइब्रेरी और एंड्रॉइड डाटाबेसिंग लाइब्रेरी का उपयोग कर रहा हूं। मेरे पास AuthActivity है और AuthViewModel एंड्रॉइड के व्यू मॉडेल क्लास को बढ़ाता है। कुछ मामलों में मुझे ViewModel के लिए कुछ तरीकों को कॉल करने के लिए गतिविधि के लिए पूछना होगा। उदाहरण के लिए जब उपयोगकर्ता Google Auth या Facebook Auth बटन पर क्लिक करता है, जो गतिविधि वर्ग में प्रारंभ होता है (क्योंकि GoogleApiClient को प्रारंभ करने के लिए मुझे गतिविधि संदर्भ की आवश्यकता होती है जिसे मैं व्यूमोडेल में नहीं भेज सकता, मॉडल देखें गतिविधि फ़ील्ड को स्टोर नहीं कर सकता)। गूगल एपीआई और फेसबुक एपीआई के साथ सभी तर्क गतिविधि वर्ग में लागू:एंड्रॉइड व्यू मॉडेल कॉल गतिविधि विधियां
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(signInIntent, GOOGLE_AUTH);
मैं फेसबुक लॉगइन और गूगल का अनुरोध नहीं कर सकते हैं:
//google api initialization
googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
//facebook login button
loginButton.setReadPermissions(Arrays.asList("email", "public_profile"));
loginButton.registerCallback(callbackManager,
इसके अलावा मैं आशय साइन इन कॉल करने की आवश्यकता है जो भी गतिविधि संदर्भ की आवश्यकता है
public interface AuthActivityListener {
void requestSignedIn();
void requestGoogleAuth();
void requestFacebookAuth();
void requestShowDialogFragment(int type);
}
में श्रोता को लागू करें: लॉगिन, दृश्य मॉडल वर्ग से या startActivity इरादे, तो मैं वर्ग इंटरफ़ेस AuthActivityListener बनाया गतिविधि वर्ग:
AuthActivityRequester authRequestListener = new AuthActivityRequester() {
@Override
public void requestSignedIn() {
Intent intent = new Intent(AuthActivity.this, ScanActivity.class);
startActivity(intent);
AuthActivity.this.finish();
}
@Override
public void requestGoogleAuth() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(signInIntent, GOOGLE_AUTH);
}
...
और गतिविधि तरीकों कॉल करने के लिए दृश्य मॉडल कक्षा में इस श्रोता आवंटित: के बाद गूगल या फेसबुक प्रमाणीकरण पारित कर दिया मैं गतिविधि से फोन दृश्य मॉडल विधि
// in constructor
this.authRequester = listener;
// call activity method
public void onClickedAuthGoogle() {
authRequester.requestGoogleAuth();
}
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
if (requestCode == GOOGLE_AUTH) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
if (acct != null) {
viewModel.onGoogleUserLoaded(acct.getEmail(), acct.getId());
} else {
viewModel.onGoogleUserLoaded("", "");
}
}
}
}
क्या कोई मुझे बता सकता है कि दृश्य मॉडल और गतिविधि के बीच संचार का यह दृष्टिकोण सही है, या मुझे दृश्य मॉडल से गतिविधि विधियों को कॉल करने का एक और तरीका खोजने की आवश्यकता है?
अरे क्या आपको Google और फेसबुक साइन इन के लिए उचित एमवीवीएम संरचना मिली है? मैं इसकी तलाश कर रहा हूं। – iMDroid