Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Function registerForActivityResult not Exist

i have tried all solutions in internet to resolve this issue but no one is worked

i am using dependencies

implementation 'androidx.appcompat:appcompat:1.3.0-beta01'  
implementation "androidx.activity:activity:1.2.0-alpha07"  
implementation "androidx.fragment:fragment:1.3.0-alpha07" 

enter image enter code heredescription here

here is
my MainActivity Class where i use the function .. i don't know if the problem in AppCompatActivity super class ..i don't know if it doesn't contain registerForActivityResult function
what i am doing is trying to call sign in activity made by google library and get result back in ActivityResultLauncher using activityresultcallback

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    public static final String ANONYMOUS = "anonymous";
    public static final int DEFAULT_MSG_LENGTH_LIMIT = 1000;
    public static int num = 1;
    private ListView mMessageListView;
    private MessageAdapter mMessageAdapter;
    private ProgressBar mProgressBar;
    private ImageButton mPhotoPickerButton;
    private EditText mMessageEditText;
    private Button mSendButton;
    private FirebaseDatabase firebaseDatabase;
    private DatabaseReference dReference;
    private String mUsername;
    private List<FriendlyMessage> friendlyMessages;

    private final ActivityResultLauncher<Intent> launcher = registerForActivityResult(new FirebaseAuthUIActivityResultContract(),
            new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() {
                @Override
                public void onActivityResult(FirebaseAuthUIAuthenticationResult result) {
                    onSignInResult(result);
                }
            }
    );



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FirebaseAuth auth = FirebaseAuth.getInstance();
        FirebaseUser user = auth.getCurrentUser();
        if (user == null) {
            List<AuthUI.IdpConfig> providers = Arrays.asList(
                    new AuthUI.IdpConfig.EmailBuilder().build(),
                    new AuthUI.IdpConfig.PhoneBuilder().build(),
                    new AuthUI.IdpConfig.GoogleBuilder().build());
            Intent signinIntent = AuthUI.getInstance().createSignInIntentBuilder().setAvailableProviders(providers).build();
           startActivity(signinIntent);

        }

        // Initialize references to views
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
        mMessageListView = (ListView) findViewById(R.id.messageListView);
        mPhotoPickerButton = (ImageButton) findViewById(R.id.photoPickerButton);
        mMessageEditText = (EditText) findViewById(R.id.messageEditText);
        mSendButton = (Button) findViewById(R.id.sendButton);
        friendlyMessages = new ArrayList<>();
        mMessageAdapter = new MessageAdapter(this, R.layout.item_message, friendlyMessages);
        mMessageListView.setAdapter(mMessageAdapter);

        //firebaseDatabase=FirebaseDatabase.getInstance();
        dReference = FirebaseDatabase.getInstance().getReference();
        dReference = dReference.child("Messages");
        dReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                String mess = dataSnapshot.getValue(String.class);
                mMessageAdapter.add(new FriendlyMessage(mess, "abdo", null));
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        // Initialize progress bar
        mProgressBar.setVisibility(ProgressBar.INVISIBLE);

        // ImagePickerButton shows an image picker to upload a image for a message
        mPhotoPickerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // TODO: Fire an intent to show an image picker
            }
        });

        // Send button sends a message and clears the EditText
        mSendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // TODO: Send messages on click

                dReference.push().setValue(mMessageEditText.getText().toString());
                // Clear input box
                mMessageEditText.setText("");
                num++;
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

    public void onSignInResult(FirebaseAuthUIAuthenticationResult result)
    {
        if(result.getResultCode()==RESULT_OK)
        return;
        else
            finish();
    }
}

like image 247
Abdo Mostafa Avatar asked Jun 13 '26 02:06

Abdo Mostafa


1 Answers

  1. You need to extend androidx.activity.ComponentActivity if you want to use androidx.activity APIs like registerForActivityResult.

  2. See the following example, it works with AppCompatActivity() too:

    public class MainActivity extends AppCompatActivity {
    
     //....
    
     ActivityResultLauncher<Intent> activityResultLauncher;
    
     //....
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
    
         activityResultLauncher = registerForActivityResult(
                 new ActivityResultContracts.StartActivityForResult(),
                 new ActivityResultCallback<ActivityResult>(){
                     @Override
                     public void onActivityResult(ActivityResult result){
                         if(result.getData() != null)
                         {
                             if (result.getResultCode() == RESULT_OK) {
                                 Log.d(TAG, "From Activity2:    RESULT_OK\n");
                             }
                             if (result.getResultCode() == Activity.RESULT_CANCELED) {
                                 Log.d(TAG, "From Activity2:    CANCELLED\n");
                             }
                         }else
                         {
                             Log.d(TAG, "From Activity2:    NO DATA\n");
                         }
                     }
                 });
     }
    
     //........
    
    
     // when you wish to launch the other activity
     Intent nextActivityIntent = new Intent(this, Activity2.class);
     activityResultLauncher.launch(nextActivityIntent);
    

    }

like image 177
Nicky Rosenberg Avatar answered Jun 18 '26 00:06

Nicky Rosenberg