初めて出会ったJNI ERROR(app bug):local reference table overflow(max=512)

1550 ワード

2017-9-14で遭遇したちょっとした問題
.
プロジェクトの中で写真を撮ったり、アルバムを選んだりして、サービス側にアップロードすることができます.このネット上で検索すると、アップロード前に圧縮する必要があります.ネット上でいくつか探しても満足していません.ちょうどcrazycodeboy/TakePhotoを見て、悪くないと思って、ずっと使っています.今度の新しいプロジェクトは、また使いました.単一継承のためBaseActivityは必要なものもあります.だから引き続き組み立て方で統合します.compile 'com.jph.takephoto:takephoto_library:4.0.3'を使用した結果、Activityに入るや否やtakePhoto = (TakePhoto) TakePhotoInvocationHandler.of(this).bind(new TakePhotoImpl(this, this));でエラーが発生し、JNI ERROR(app bug):local reference table overflow(max=512)となった.長い間探していたが、原因が見つからず、相続方法を試してみるしかなかった.extends TakePhotoActivityを通じて、意外にもいいとは思わなかった.関連コードを比較するしかない.invoke()メソッドを書き換えるとき、私は意外にも変更していないことを発見して、戻ったreturn null;TakePhotoActivityの中のコードに変更して、いいです.の
@Override
public TPermissionType invoke(InvokeParam invokeParam) {
  TPermissionType type=PermissionManager.checkPermission(TContextWrap.of(this),invokeParam.getMethod());
  if(TPermissionType.WAIT.equals(type)){
    this.invokeParam=invokeParam;
  }
  return type;
}

以前のプロジェクト用バージョンは4.0.0で、取得経路はgetPath();しかなかったが、現在使用されている4.0.3バージョンは、この方法を除いてgetCompressPath();// getOriginalPath();// に変更された.試してみると、getCompressPath();で返される値は空で、圧縮を設定するのを忘れたためです.getTakePhoto()に加算
CompressConfig config = new CompressConfig.Builder().setMaxSize(409600).create();// 
takePhoto.onEnableCompress(config, false);// 

設定後、圧縮後と元のピクチャパスが正常に取得されます.