2013-07-07 4 views
1

내 응용 프로그램에서 MUPDF reader를 사용하여 렌더링하는 중입니다. 렌더링 중에 nullpointer 오류가 발생합니다. 코드를 완전히 첨부했습니다 .SD 카드에 pdf가 있고 sdcard가 마운트 가능한지 확인되었습니다.mupdf를 사용하여 pdf를 렌더링하는 동안 오류가 발생했습니다.

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.ebookr" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="16" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <activity android:name="com.artifex.mupdfdemo.MuPDFActivity" 
       android:label="@string/app_name" 
       android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/vnd.ms-xpsdocument"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/pdf"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/x-cbz"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.xps"/> 
      <data android:host="*"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.pdf"/> 
      <data android:host="*"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.cbz"/> 
      <data android:host="*"/> 
     </intent-filter> 
    </activity> 
    <activity android:name="OutlineActivity" 
       android:label="@string/outline_title"> 
    </activity> 

    <activity 
     android:name="com.example.ebookr.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

에게

package com.example.ebookr; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.content.res.AssetManager; 
import android.util.Log; 
import android.view.Menu; 
import com.artifex.mupdfdemo.*; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    CopyAssetsbrochure(); 

    try 
    { 
    //Uri uri = Uri.parse("/sdcard/divya.pdf"); 

    String path = "/sdcard/divya.pdf"; 
    MuPDFActivity pdf = new MuPDFActivity(); 
    try { 
    pdf.openFileInput(path); 
    } 
    catch(Exception e) 
    { 
     Log.e("in code",e.getMessage()); 
    } 

    /*Intent intent = new Intent(getBaseContext(), MuPDFActivity.class); 

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    intent.setAction(Intent.ACTION_VIEW); 

    intent.setData(uri); 

    getBaseContext().startActivity(intent); */ 
    } 
    catch (Exception e) { 
     // TODO Auto-generated catch block 
     StackTraceElement[] stack = e.getStackTrace(); 
     String StringTrace = ""; 
     String Trace = null; 
     for(StackTraceElement line : stack) 
     { 
      Trace += line.toString(); 
     } 

      Log.e("Soap",Trace); 

     String err = (e.getMessage()==null)?"SD Card failed":e.getMessage(); 
     Log.e("sdcard-err2:",err); 
     e.getCause(); 

    } 



} 

private void CopyAssetsbrochure() { 
    AssetManager assetManager = getAssets(); 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     Log.d("Test", "sdcard mounted and writable"); 
    } 
    else 
    { 
     Log.d("Test", "sdcard state: " + state); 
    } 
    String[] files = null; 
    try 
    { 
     files = assetManager.list(""); 
    } 
    catch (IOException e) 
    { 
     Log.e("tag", e.getMessage()); 
    } 
    for(int i=0; i<files.length; i++) 
    { 
     String fStr = files[i]; 
     if(fStr.equalsIgnoreCase("divya.pdf")) 
     { 
      InputStream in = null; 
      OutputStream out = null; 
      try 
      { 
       in = assetManager.open(files[i]); 
       out = new FileOutputStream("/sdcard/" + files[i]); 
       copyFile(in, out); 
       in.close(); 
       in = null; 
       out.flush(); 
       out.close(); 
       out = null; 
       break; 
      } 
      catch(Exception e) 
      { 
       Log.e("CopyAssests", e.getMessage()); 
      } 
     } 
    } 
} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

} 
012 ManiActivity.java을 제발 도와 마 3,516,

로그 캣 :

07-07 11:22:49.689: W/Trace(2085): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:21.929: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:21.929: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:21.939: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:22.310: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:22.365: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:23.279: D/Test(2189): sdcard mounted and writable 
07-07 11:23:24.631: E/Soap(2189): nullandroid.util.Log.println_native(Native     Method)android.util.Log.e(Log.java:231)com.example.ebookr.MainActivity.onCreate(MainActivity.java:40)android.app.Activity.performCreate(Activity.java:5104)android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)android.app.ActivityThread.access$600(ActivityThread.java:141)android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)android.os.Handler.dispatchMessage(Handler.java:99)android.os.Looper.loop(Looper.java:137)android.app.ActivityThread.main(ActivityThread.java:5039)java.lang.reflect.Method.invokeNative(Native Method)java.lang.reflect.Method.invoke(Method.java:511)com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)dalvik.system.NativeStart.main(Native Method) 
07-07 11:23:24.631: E/sdcard-err2:(2189): println needs a message 
07-07 11:23:24.769: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:24.790: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:24.861: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:24.909: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.099: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.109: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.139: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.209: I/Choreographer(2189): Skipped 31 frames! The application may be doing too much work on its main thread. 
07-07 11:23:25.249: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.249: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.269: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.269: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.279: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.279: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.299: D/gralloc_goldfish(2189): Emulator without GPU emulation detected. 
07-07 11:23:25.409: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 
07-07 11:23:25.469: W/Trace(2189): Unexpected value from nativeGetEnabledTags: 0 

답변

0

구글에서 다운로드 표준 MuPDF 응용 프로그램이 파일을 열고 재생할 수 있습니까? PDF 파일 또는 특정 PDF 파일에 문제가 있습니까? git (또는 릴리즈 아카이브)의 소스를 사용하여 바닐라 MuPDF android 앱을 변경하지 않고 다시 빌드하면 OK가 열리나요?

새로운 MuPDFActivity() 호출에서 어딘가에서 죽어 가고있는 것으로 보입니다. 그 전후의 간단한 로그를 통해 더 명확하게 알 수 있습니다.

로그에서 NullPointerException이라고 생각하는 이유를 즉시 볼 수 없습니다.

간단히 말해, 더 많은 정보가 필요하다고 생각합니다. 미안합니다.

관련 문제