• 11
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

This Exception is taking place in my code help please. my all code is posted below.

java.lang.IllegalArgumentException: Cannot create PhoneAuthCredential
without either verificationProof, sessionInfo, ortemprary proof.
        at com.google.android.gms.common.internal.Preconditions.checkArgument(Unknown
Source)
        at com.google.firebase.auth.PhoneAuthCredential.<init>(Unknown Source)
        at com.google.firebase.auth.PhoneAuthProvider.getCredential(Unknown
Source)
        at com.approsoft.momentsapp.providerfrags.EnterPhoneFragment$3.onVerificationCompleted(EnterPhoneFragment.java:177)
        at com.google.firebase.auth.api.internal.zzer.zza(Unknown Source)
        at com.google.firebase.auth.api.internal.zzeu.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:238)
        at android.app.ActivityThread.main(ActivityThread.java:6006)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:937)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:798)

How to resolve this issue before I updated ui version 4.0.1 to 4.2.0 and also update 4.3.1 but not resolve this issue

I have passed too many days on this issue but not resolve please help .

Here is my code

public class EnterPhoneFragment extends Fragment {

Button btnSendCode, btnVerify, btnResendCode;
EditText etCode;
IntlPhoneInput etPhoneNumber;
TextView tvTerms;

PhoneAuthProvider.OnVerificationStateChangedCallbacks verificationCallbacks;
PhoneAuthProvider.ForceResendingToken resendingToken;
FirebaseAuth firebaseAuth;

String phoneVerificationID;
HashMap<String, String> userDetails;
String userID;

private static final long TIMEOUT_DURATION = 60;

SessionManager sessionManager;
FragmentManager fragmentManager;
private MaterialDialog dialogSave;
private String smsCode;
private PhoneAuthCredential credential;

public EnterPhoneFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_enter_phone, container, false);
    sessionManager = new SessionManager(getActivity());
    userDetails = sessionManager.getUserDetails();
    userID = userDetails.get(SessionManager.KEY_USER_ID);
    fragmentManager = getFragmentManager();

    firebaseAuth = FirebaseAuth.getInstance();
    setUpVerificationCallbacks();
    tvTerms = view.findViewById(R.id.tvTerms);
    String termsString = "<u><b>Terms of Service</b></u>";
    tvTerms.setText(Html.fromHtml(termsString));
    etPhoneNumber = view.findViewById(R.id.etPhoneNumber);

    etCode = view.findViewById(R.id.etCode);
    etCode.setEnabled(false);

    btnResendCode = view.findViewById(R.id.btnResendCode);
    btnResendCode.setEnabled(false);

    dialogSave = new MaterialDialog.Builder(getActivity())
            .title("Sending")
            .content("Please wait")
            .cancelable(false)
            .progress(true, 0).build();

    btnVerify = view.findViewById(R.id.btnVerify);
    btnVerify.setEnabled(false);
    btnVerify.setBackgroundColor(getResources().getColor(R.color.colorGrey));
    btnVerify.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String code = etCode.getText().toString();
            if (TextUtils.isEmpty(code)) {
                etCode.setError("Enter smsCode first");
                etCode.requestFocus();
            } else {
                if (smsCode.equals(code)) {
                    signInWithPhoneCredential(credential);
                } else {
                    Toast.makeText(getActivity(), "Enter a valid code!", Toast.LENGTH_SHORT).show();
                }
            }
        }
    });

    btnSendCode = view.findViewById(R.id.btnSendCode);
    btnSendCode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String phoneNumber;
            if (etPhoneNumber.isValid()) {
                phoneNumber = etPhoneNumber.getNumber();
                verifyPhoneNumber(phoneNumber);

            } else {
                Toast.makeText(getActivity().getApplicationContext(), "Enter a valid phone number!", Toast.LENGTH_SHORT).show();
            }
        }
    });
    saveSetting();
    return view;
}

@Override
public void onResume() {
    super.onResume();
}

@Override
public void onPause() {
    super.onPause();
}
public void verifyPhoneNumber(String phoneNumber){
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            phoneNumber,
            60,
            TimeUnit.SECONDS,
            getActivity(),
            verificationCallbacks);
}

private void setUpVerificationCallbacks() {
    try {
        verificationCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                //signInWithPhoneCredential(phoneAuthCredential);
                smsCode = phoneAuthCredential.getSmsCode();
                credential = PhoneAuthProvider.getCredential(phoneVerificationID, smsCode);
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {
                if (e instanceof FirebaseAuthInvalidCredentialsException) {
                    Toast.makeText(getActivity().getApplicationContext(), "Invalid credentials used. Try again!", Toast.LENGTH_SHORT).show();
                } else if (e instanceof FirebaseTooManyRequestsException) {
                    Toast.makeText(getActivity().getApplicationContext(), "SMS Quota expired. Come back later.", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                phoneVerificationID = s;
                resendingToken = forceResendingToken;
                etPhoneNumber.setEnabled(false);
                btnSendCode.setEnabled(false);
                etCode.setEnabled(true);
                btnVerify.setEnabled(true);
                btnVerify.setBackgroundColor(getResources().getColor(R.color.colorIndigoBlue));
                btnResendCode.setEnabled(true);
            }
        };
    } catch (Exception ex) {
        Log.i("IllegalState", "Exception is Illegal state exception");
    }
}

private void signInWithPhoneCredential(PhoneAuthCredential credential) {
    firebaseAuth.signInWithCredential(credential)
            .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        FirebaseUser user = task.getResult().getUser();
                        final String userPhone = user.getPhoneNumber();
                        RequestQueue queue = Volley.newRequestQueue(getActivity());
                        try {
                            dialogSave.show();

                            // Request a string response from the provided URL.
                            StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.url + "save_phone.php",
                                    new Response.Listener<String>() {
                                        @Override
                                        public void onResponse(String result) {
                                            if (!dialogSave.isCancelled()) {
                                                dialogSave.dismiss();
                                            }
                                            if (result.equals("Error")) {
                                                Toast.makeText(getActivity(), "userId and mobile are not empty!", Toast.LENGTH_SHORT).show();
                                            }
                                            if (result.equals("this mobile number already exist!")) {
                                                Toast.makeText(getActivity(), "this mobile number already exist!", Toast.LENGTH_SHORT).show();
                                            } else {
                                                try {
                                                    JSONObject response = new JSONObject(result);
                                                    String userEmail = response.getString("email");
                                                    if (userEmail != null && !userEmail.isEmpty()) {
                                                        String userID = response.getString("id");
                                                        String fbID = response.getString("fb_id");
                                                        String googleID = response.getString("google_id");
                                                        String firstName = response.getString("first_name");
                                                        String lastName = response.getString("last_name");
                                                        String userPass = response.getString("password");
                                                        String userMobile = response.getString("mobile");
                                                        String userLocation = response.getString("location");
                                                        String userDOB = response.getString("dob");
                                                        String userGender = response.getString("gender");
                                                        String posts = response.getString("posts");
                                                        String following = response.getString("following");
                                                        String followers = response.getString("followers");
                                                        String userImagePath = "http://fotogher.com/app/Moments/provider/" + response.getString("image_path");
                                                        sessionManager.createLoginSession(userID, userEmail, fbID, googleID,
                                                                firstName, lastName, userPass, userMobile, userLocation,
                                                                userDOB, userGender, userImagePath, posts, following, followers);
                                                        for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) {
                                                            fragmentManager.popBackStack();
                                                        }
                                                        startActivity(new Intent(getActivity(), MainActivity.class));
                                                        getActivity().finish();
                                                    } else {
                                                        Toast.makeText(getActivity().getApplicationContext(),
                                                                "Profile creation failed. Try again!",
                                                                Toast.LENGTH_SHORT).show();
                                                    }
                                                } catch (JSONException e) {
                                                    e.printStackTrace();
                                                }
                                            }
                                        }
                                    }, new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse(VolleyError error) {
                                    if (!dialogSave.isCancelled()) {
                                        dialogSave.dismiss();
                                    }
                                    Toast.makeText(getActivity(), "Error!", Toast.LENGTH_SHORT).show();
                                }

                            }) {
                                @Override
                                protected Map<String, String> getParams() {
                                    Map<String, String> params = new HashMap<String, String>();
                                    params.put("mobile", userPhone);
                                    params.put("user_id", userID);
                                    return params;
                                }

                                @Override
                                public Map<String, String> getHeaders() throws AuthFailureError {
                                    Map<String, String> params = new HashMap<String, String>();
                                    params.put("Content-Type", "application/x-www-form-urlencoded");
                                    return params;
                                }
                            };
                            // Add the request to the RequestQueue.
                            queue.add(stringRequest);
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }

                    } else {
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification smsCode entered was invalid
                            Log.i("Exception","Invalid smsCode entered. Try again!");
                        }
                    }
                }
            });
}

my gradle file is this

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.approsoft.momentsapp"
        minSdkVersion 17
        targetSdkVersion 27
        versionCode 2
        versionName "0.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
repositories {
    mavenCentral()
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    /*implementation 'com.android.support:appcompat-v7:26.1.0'*/
    implementation 'com.android.support:design:27.1.1'
    /*implementation 'com.android.support.constraint:constraint-layout:1.0.2'*/
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'com.google.firebase:firebase-core:16.0.7'
    implementation 'com.google.android.gms:play-services-auth:16.0.1'
    implementation 'com.google.firebase:firebase-database:16.1.0'
    implementation 'com.google.firebase:firebase-analytics:16.3.0'
    implementation 'com.google.firebase:firebase-auth:16.1.0'
    implementation 'com.google.firebase:firebase-messaging:17.4.0'
    implementation 'com.google.android.gms:play-services-places:16.0.0'
    implementation 'com.google.android.gms:play-services-location:16.0.0'
    implementation 'com.firebaseui:firebase-ui-auth:4.2.0'
    implementation 'com.facebook.android:facebook-android-sdk:4.29.0'
    implementation 'com.github.ittianyu:BottomNavigationViewEx:1.2.4'
    implementation 'de.hdodenhof:circleimageview:2.2.0'
    implementation 'com.loopj.android:android-async-http:1.4.9'
    implementation 'com.wonderkiln:camerakit:0.13.2'
    implementation 'com.camerakit:jpegkit:0.1.0'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.0'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0'
//    compile 'com.github.yalantis:ucrop:2.2.1'
    implementation 'com.github.bumptech.glide:glide:4.6.1'
    implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
/*    implementation 'com.hbb20:ccp:2.2.3'*/
    implementation 'com.github.mukeshsolanki:country-picker-android:2.0.1'
    implementation 'hani.momanii.supernova_emoji_library:supernova-emoji-library:0.0.2'
    //for video view
    //implementation 'com.github.halilozercan:BetterVideoPlayer:kotlin-SNAPSHOT'
    implementation 'com.android.volley:volley:1.1.1'
    //implementation 'com.github.hani-momanii:SuperNova-Emoji:1.1'
    //implementation project(':supernova-emoji-library')
//    compile 'id.zelory:compressor:2.1.0'
    implementation 'net.rimoto:intlphoneinput:1.0.1'
    implementation 'com.github.zcweng:switch-button:0.0.3@aar'
    implementation 'com.bikomobile:multipart:1.3.4'
    implementation 'com.github.shts:StoriesProgressView:3.0.0'
    implementation('com.mapbox.mapboxsdk:mapbox-android-sdk:6.5.0@aar') {
        transitive = true
    }
    implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.19.0'
    implementation('com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.19.0') {
        transitive = true
    }
    implementation 'com.android.support:multidex:1.0.3'
//    testImplementation 'junit:junit:4.12'
//    androidTestImplementation 'com.android.support.test:runner:1.0.1'
//    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

apply plugin: 'com.google.gms.google-services'

As Alex Saveau said (one of Firebase UI Developers) :

Users will switch to their messaging app and don't have a lot of RAM available so it kills your app. Since we only store the verification ID in memory, it gets lost. Side note: the number of times we've added bugs like this, you'd think we would learn. Nope. ??

So check your code and memory and trace mabye you can find something to get away from it but for now this problem still not solved

Source : github.com

  • 1
Reply Report