Я разрабатываю приложение для загрузки файла PDF в новую активность PDF из Webview. используя намерение и библиотеку PdfViewer.jar. Я знаю, что PDF-файлы невозможно открыть в Webview, но пытаюсь открыть в activity_pdf.xml. Когда я нажимаю ссылку в Webview, мое приложение не может вызвать PdfViewer.class & Crash, что может быть возможной причиной. Пожалуйста, помогите, я застрял здесь. Код выглядит нормально, ошибок нет.

public class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Intent intent = new Intent(PdfActivity.this,PdfViewer.class);
            final Uri uri = PdfActivity.this.getIntent().getData();
            URL pdfurl = null;

            try {
                pdfurl = new URL(uri.getScheme(), uri.getHost(), uri.getPath());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }

            intent.putExtra("PDFURL", pdfurl);
            startActivity(intent);
            System.out.println("PDF WORKING");

            return super.shouldOverrideUrlLoading(view, url);
        }

Обратитесь к моей ошибке Logcat

2022-01-19 04:17:12.401 22159-22159/ak.wp.meto E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ak.wp.meto, PID: 22159
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference
        at ak.wp.meto.activity.PdfActivity$MyWebViewClient.shouldOverrideUrlLoading(PdfActivity.java:90)
        at android.webkit.WebViewClient.shouldOverrideUrlLoading(WebViewClient.java:83)
        at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(Unknown Source:90)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:335)
        at android.os.Looper.loop(Looper.java:206)
        at android.app.ActivityThread.main(ActivityThread.java:8595)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

В чем может быть ошибка в этой строке? Я получаю ошибку logcat в этой строке. Пожалуйста помоги

        pdfurl = new URL(uri.getScheme(), uri.getHost(), uri.getPath());

Я использую библиотеку PdfViewer.jar, в тексте README упоминается использование, см. ссылку ниже для справки, https://sourceforge .net/p/andpdf/code/HEAD/tree/tag/Beta_0_1_11/AndroidPdfViewer/activitysrc/net/sf/andpdf/

0
abhilash kaveriappa 19 Янв 2022 в 05:35
У меня есть некоторые сомнения в вашем коде, как вы сопоставляете ссылку в формате pdf, чтобы перезапустить действие?
 – 
Ajay K S
19 Янв 2022 в 07:14

3 ответа

Проблема в том, что ваш uri (Uri uri = PdfActivity.this.getIntent().getData();) переменная не получает данные из намерения. поэтому вам нужно сначала получить данные для использования final Uri uri= getIntent().getStringExtra("name");, как ответил @Manjeetdeswal

2
Ajay Sivadasan 19 Янв 2022 в 07:03
  1. Откуда вы получаете uri.

  2. Это ясно показывает, что uri имеет значение null, значит, не имеет значения.

  3. если вы получаете его от предыдущей деятельности, используйте это.

      final Uri uri= getIntent().getStringExtra("name");
    
1
Manjeet deswal 19 Янв 2022 в 06:17
public class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Intent intent;
URL pdfurl = null;
if( PdfActivity.this.getIntent().getStringExtra("your key")!=null){
            final Uri uri = PdfActivity.this.getIntent().getData();
            try {
                pdfurl = new URL(uri.getScheme(), uri.getHost(), uri.getPath());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
}
if(/*check the URL is pdf contained URL*/){// check with url(String)
            intent = new Intent(PdfActivity.this,PdfViewer.class);
            intent.putExtra("PDFURL", pdfurl);
            startActivity(intent);
            System.out.println("PDF WORKING");
}
            return super.shouldOverrideUrlLoading(view, url);
        }

Проверьте, что pdf содержится в URL-адресе, а затем передайте URL-адрес другому действию

1
Ajay K S 19 Янв 2022 в 07:22