我正在使用 pdf sdk 从 url 打开 pdf。我尝试了PlugPDF示例项目,它工作正常,然后我用我的 pdf url 替换了 url,它再次打开,然后我将 SimpleReaderActivity.java 的代码复制到我的项目中,然后我得到了这个错误
01-30 19:20:39.644: E/AndroidRuntime(28122): FATAL EXCEPTION: main
01-30 19:20:39.644: E/AndroidRuntime(28122): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ownersvault.ownersvault/com.ownersvault.ownersvault.home.DocViewer}: java.lang.NullPointerException
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.ActivityThread.access$700(ActivityThread.java:150)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.os.Looper.loop(Looper.java:137)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.ActivityThread.main(ActivityThread.java:5279)
01-30 19:20:39.644: E/AndroidRuntime(28122): at java.lang.reflect.Method.invokeNative(Native Method)
01-30 19:20:39.644: E/AndroidRuntime(28122): at java.lang.reflect.Method.invoke(Method.java:511)
01-30 19:20:39.644: E/AndroidRuntime(28122): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
01-30 19:20:39.644: E/AndroidRuntime(28122): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
01-30 19:20:39.644: E/AndroidRuntime(28122): at dalvik.system.NativeStart.main(Native Method)
01-30 19:20:39.644: E/AndroidRuntime(28122): Caused by: java.lang.NullPointerException
01-30 19:20:39.644: E/AndroidRuntime(28122): at com.logdog.Worker.Worker.PrintLog(Worker.java:148)
01-30 19:20:39.644: E/AndroidRuntime(28122): at com.logdog.LogDog.Print(LogDog.java:75)
01-30 19:20:39.644: E/AndroidRuntime(28122): at com.ownersvault.ownersvault.home.DocViewer.printHeapState(DocViewer.java:340)
01-30 19:20:39.644: E/AndroidRuntime(28122): at com.ownersvault.ownersvault.home.DocViewer.onCreate(DocViewer.java:86)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.Activity.performCreate(Activity.java:5276)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
01-30 19:20:39.644: E/AndroidRuntime(28122): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
01-30 19:20:39.644: E/AndroidRuntime(28122): ... 11 more
它在这一行显示错误
LogDog.Print(Level.DEBUG, "Heap - max: " + maxMemory + ", total: "
+ totalMemory + ", free: " + freeMemory + ", alloc: "
+ allocMemory);
我的活动课
public class DocViewer extends Activity {
String openMethod ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PropertyManager.setScrollFrictionCoef(1);
PropertyManager.setScrollVelocityCoef(1);
PropertyManager.setPreviewQualityCoef(1.5);
CheckBoxField.setGlobalCustomPainter(new MyCheckBoxPainter(this));
// Intent intent = getIntent();
openMethod = "URL";
if (openMethod != null && !("").equals(openMethod)) {
if (openMethod.startsWith("DATA")) {// DATA open
openData();
} else if (openMethod.startsWith("URL")) {// URL open
openUrl();
} else if(openMethod.startsWith("PATH")) {// FILE_PATH open
open(openMethod.substring(openMethod.indexOf(":") + 1));
}
} else {
openData();// DATA open is default
}
printHeapState();
}
SimpleDocumentReader mViewer;
protected void openData() {
String fileName = new String("Gone_With_the_Wind.pdf");
AssetManager am = getResources().getAssets();
byte[] data = null;
try {
InputStream is = am.open(fileName);
int size = is.available();
if (size > 0) {
data = new byte[size];
is.read(data);
}
is.close();
} catch (Exception ex) {
}
mViewer = SimpleReaderFactory.createSimpleViewer(this, mViewerListener);
mViewer.setPageViewListener(mPageViewListener);
mViewer.openData(data, data.length, "");
mViewer.setTitle("Sample");
mViewer.setPageDisplayMode(PageDisplayMode.VERTICAL);
}
protected void open(String path) {
mViewer = SimpleReaderFactory.createSimpleViewer(this, mViewerListener);
mViewer.openFile(path, "");
mViewer.setPageViewListener(mPageViewListener);
mViewer.setTitle("Sample");
}
protected void openUrl() {
String url = "http://cs.brown.edu/~pff/papers/seg-ijcv.pdf";
RelativeLayout relativeLayout = new RelativeLayout(this);
mViewer = SimpleReaderFactory.createSimpleViewer(this, mViewerListener);
mViewer.setPageViewListener(mPageViewListener);
mViewer.openUrl(url, "");
mViewer.setTitle("Sample");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
mViewer.refreshLayout();
super.onConfigurationChanged(newConfig);
}
SimpleDocumentReaderListener mViewerListener = new SimpleDocumentReaderListener() {
@Override
public void onLoadFinish(DocumentState.OPEN state) {
LogDog.Print(Level.INFO, "state::"+state);
if (state == OPEN.SUCCESS) {
mViewer.setAnnotEventLisener(mAnnotEventListener);
testSetFieldState();
testSetFieldValue();
}
}
private void testSetFieldValue() {
ReaderView readerView = mViewer.getReaderView();
readerView.setFieldValue(0, "TextField1[0]", "TEST3");
LogDog.Print(
Level.DEBUG,
"test1 fieldValue: "
+ readerView.getFieldValue(0, "TextField1[0]"));
}
private void testSetFieldState() {
ReaderView readerView = mViewer.getReaderView();
readerView.setFieldState(0, "test1", FieldState.READONLY);
readerView.setFieldState(0, "test2", FieldState.DISABLE);
LogDog.Print(Level.DEBUG,
"test1 fieldState: " + readerView.getFieldState(0, "test1"));
LogDog.Print(Level.DEBUG,
"test2 fieldState: " + readerView.getFieldState(0, "test2"));
readerView.setFieldState(0, "test1", FieldState.ENABLE);
LogDog.Print(Level.DEBUG,
"test1 fieldState: " + readerView.getFieldState(0, "test1"));
}
};
AnnotEventListener mAnnotEventListener = new AnnotEventListener() {
@Override
public boolean onTapUp(BaseAnnot annot) {
return false;
}
@Override
public boolean onLongPress(BaseAnnot annot) {
return false;
}
};
PageViewListener mPageViewListener = new PageViewListener() {
@Override
public void cachePageBitmap(int pageIdx, Bitmap bitmap) {
}
@Override
public void onAnnotationList(int pageIdx, List<BaseAnnot> annotList) {
LogDog.Print(Level.DEBUG, "onAnnotationList pageIdx : " + pageIdx);
for (BaseAnnot annot : annotList) {
StringBuilder builder = new StringBuilder();
builder.append("Annot Info - ");
builder.append("pageIdx: " + annot.getPageIdx());
builder.append(", type: " + annot.getType());
LogDog.Print(Level.DEBUG, builder.toString());
}
}
@Override
public void onFieldList(int pageIdx, List<BaseField> fieldList) {
LogDog.Print(Level.DEBUG, "PageIdx: " + pageIdx);
for (BaseField field : fieldList) {
LogDog.Print(Level.DEBUG, "Acroform type: " + field.getType());
if (field.getType().equals("TEXT_FIELD")) {
LogDog.Print(Level.DEBUG, "TEXT_FIELD uid: " + field.getUID());
field.setListener(new FieldEventListener() {
@Override
public boolean onTapUp(BaseField field) {
LogDog.Print(Level.DEBUG, "Acroform onTapUp type: " + field.getType());
return false;
}
@Override
public boolean onFocusChange(BaseField field,
boolean hasFocus) {
return false;
}
@Override
public boolean onChangedValue(BaseField field) {
return false;
}
});
} else if (field.getType().equals("CHECK_BOX")) {
LogDog.Print(Level.DEBUG, "Acroform CHECK_BOX uid: " + field.getUID());
field.setListener(new FieldEventListener() {
@Override
public boolean onTapUp(BaseField field) {
LogDog.Print(Level.DEBUG, "Acroform onTapUp type: " + field.getType());
return false;
}
@Override
public boolean onFocusChange(BaseField field, boolean hasFocus) {
return false;
}
@Override
public boolean onChangedValue(BaseField field) {
return false;
}
});
} else if (field.getType().equals("BUTTON")) {
ButtonField btnField = (ButtonField) field;
btnField.setAlphaBitmap(BitmapFactory.decodeResource(
getResources(), R.drawable.btn_brightness_on), true);
LogDog.Print(Level.DEBUG, "Acroform BUTTON uid: " + field.getUID());
field.setListener(new FieldEventListener() {
@Override
public boolean onTapUp(BaseField field) {
LogDog.Print(Level.DEBUG, "Acroform onTapUp type: " + field.getType());
return false;
}
@Override
public boolean onFocusChange(BaseField field,
boolean hasFocus) {
return false;
}
@Override
public boolean onChangedValue(BaseField field) {
return false;
}
});
} else if (field.getType().equals("RADIO_BUTTON")) {
LogDog.Print(Level.DEBUG, "Acroform RADIO_BUTTON uid: " + field.getUID() + " title: " + field.getTitle());
field.setListener(new FieldEventListener() {
@Override
public boolean onTapUp(BaseField field) {
LogDog.Print(Level.DEBUG, "Acroform onTapUp type: " + field.getType());
return false;
}
@Override
public boolean onFocusChange(BaseField field, boolean hasFocus) {
return false;
}
@Override
public boolean onChangedValue(BaseField field) {
return false;
}
});
}
}
}
@Override
public void onPageLoadFinish() {
}
@Override
public void onAnnotationEdited(List<BaseAnnot> annotList) {
}
};
@Override
protected void onPause() {
super.onPause();
//ReaderView readerView = mViewer.getReaderView();
//readerView.save();
//readerView.saveAsFile(TARGET_PATH);
}
@Override
protected void onStop() {
super.onStop();
//mViewer.clear();
};
private void printHeapState() {
if (Runtime.getRuntime() == null) return ;
long maxMemory = Runtime.getRuntime().maxMemory();
long totalMemory = Runtime.getRuntime().totalMemory();
long freeMemory = Runtime.getRuntime().freeMemory();
long allocMemory = totalMemory - freeMemory;
}
@Override
protected void onDestroy() {
mViewer.save(); // if you opened this Activity by openData(...), it will save root directory of externel storage on your device.
mViewer.clear();
super.onDestroy();
}
}
谢谢