Получение NullPointerException в android.support.v4.app.Fragment.onActivityResult (int, int, android.content.Intent) - PullRequest
0 голосов
/ 30 августа 2018

Я использую портал NSDL Esign для аутентификации деталей Aadhar с помощью биометрического устройства. Данные отпечатка пальца сканируются успешно, но, к сожалению, в конце процесса мое приложение падает с ошибкой выше. Это то, что я реализовал в Деятельности

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

А вот код, который я добавил во фрагмент, чтобы добавить данные отпечатков пальцев на мой сервер.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case Constants.NSDL_REQUEST_CODE:
            if (resultCode == RESULT_OK && null != data) {
                String eSignResponse = data.getStringExtra("signedResponse");
                try {
                    String postData = "msg=" + URLEncoder.encode(eSignResponse, "UTF-8") + "&type=M";
                    webView.postUrl(responseURL, postData.getBytes("UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            break;
    }
}

Произошла ошибка в LogCat

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { (has extras) }} to activity {com.fin.esign/com.fin.esign.BaseActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.onActivityResult(int, int, android.content.Intent)' on a null object reference
                                                             at android.app.ActivityThread.deliverResults(ActivityThread.java:4255)
                                                             at android.app.ActivityThread.handleSendResult(ActivityThread.java:4298)
                                                             at android.app.ActivityThread.-wrap20(ActivityThread.java)
                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1613)
                                                             at android.os.Handler.dispatchMessage(Handler.java:110)
                                                             at android.os.Looper.loop(Looper.java:203)
                                                             at android.app.ActivityThread.main(ActivityThread.java:6339)
                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
                                                          Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.onActivityResult(int, int, android.content.Intent)' on a null object reference
                                                             at com.fin.esign.BaseActivity.onActivityResult(BaseActivity.java:122)
                                                             at android.app.Activity.dispatchActivityResult(Activity.java:6948)
                                                             at android.app.ActivityThread.deliverResults(ActivityThread.java:4251)
                                                             at android.app.ActivityThread.handleSendResult(ActivityThread.java:4298) 
                                                             at android.app.ActivityThread.-wrap20(ActivityThread.java) 
                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1613) 
                                                             at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                             at android.os.Looper.loop(Looper.java:203) 
                                                             at android.app.ActivityThread.main(ActivityThread.java:6339) 
                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084) 
                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945) 

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Я решил проблему, добавив удаление цикла for для фрагментов, и просто добавил свой конкретный фрагмент, где я хотел получить результат.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        if (null != fragment) {
            fragment.onActivityResult(requestCode, resultCode, data);
        } else {
            new MyFragment().onActivityResult(requestCode, resultCode, data);
        }
    }
}
0 голосов
/ 30 августа 2018

За исключение, которое вы опубликовали, у вас есть null элемент в коллекции, возвращенный вызовом getFragments(). Причина, по которой он у вас есть, заключается в другом вопросе, но пока я советую вам использовать Fragment # startActivityForResult , чтобы результат автоматически отправлялся на правильный фрагмент после.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...