gpt4 book ai didi

java - 我无法弄清楚这个 .init() 方法是如何工作的

转载 作者:行者123 更新时间:2023-12-01 11:02:45 26 4
gpt4 key购买 nike

我有一些问题。

简单地,输入启动代码,

在这里, https://github.com/pardom/Ollie

这是我的代码。

第一个等级

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
applicationId "example.com.ollietest001"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.michaelpardo:ollie:0.3.1'
provided 'com.michaelpardo:ollie-compiler:0.3.1'
}

第二个,MainActivity.java

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;

import ollie.Ollie;

public class MainActivity extends Activity {
public static final String Test = "test.db";
private Context mContext;

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

mContext = this;

Ollie.with(mContext)
.setName(Test)
.setVersion(1)
.setLogLevel(Ollie.LogLevel.FULL)
.setCacheSize(1024)
.init();
}

}

它刚刚返回 NullPointerException。

我不明白,为什么?

Caused by: java.lang.NullPointerException
at ollie.Ollie$DatabaseHelper.executeCreate(Ollie.java:336)
at ollie.Ollie$DatabaseHelper.onCreate(Ollie.java:317)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at ollie.Ollie.init(Ollie.java:143)
at ollie.Ollie$Builder.init(Ollie.java:298)
at example.com.dbtest001.MainActivity.onCreate(MainActivity.java:39)
at android.app.Activity.performCreate(Activity.java:5179)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
            at android.app.ActivityThread.access$700(ActivityThread.java:143)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4961)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
            at dalvik.system.NativeStart.main(Native Method)

最佳答案

从未使用过该库,但堆栈跟踪和源代码很容易推理:

at ollie.Ollie$DatabaseHelper.executeCreate(Ollie.java:336)

for (ModelAdapter modelAdapter : sAdapterHolder.getModelAdapters()) {

NPE 必须是 sAdapterHoldernull。它在 init() 的 try block 中初始化:

try {
Class adapterClass = Class.forName(AdapterHolder.IMPL_CLASS_FQCN);
sAdapterHolder = (AdapterHolder) adapterClass.newInstance();
} catch (Exception e) {
if (sLogLevel.log(LogLevel.BASIC)) {
Log.e(TAG, "Failed to initialize.", e);
}
}

之后代码将继续执行其他 init。这似乎是库中的一个错误,可能应该放弃那里的异常。

AdapterHolder.IMPL_CLASS_FQCN:

public static final String IMPL_CLASS_PACKAGE = "ollie";
public static final String IMPL_CLASS_NAME = "AdapterHolderImpl";
public static final String IMPL_CLASS_FQCN = IMPL_CLASS_PACKAGE + "." + IMPL_CLASS_NAME;

这似乎是另一个错误:尝试按不存在的名称加载类。

建议:不要使用不适合您的库,除非您愿意投入时间和精力来调试和修复其内部结构。

关于java - 我无法弄清楚这个 .init() 方法是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33210005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com