Java 如何修复Android中指定为非null的参数为null错误
为什么没有人对我发牢骚? 在我的应用程序中,我应该实现多索引依赖项,我在gradle中添加了它。构建文件并将一些代码写入应用程序Java 如何修复Android中指定为非null的参数为null错误,java,android,kotlin,android-multidex,Java,Android,Kotlin,Android Multidex,为什么没有人对我发牢骚? 在我的应用程序中,我应该实现多索引依赖项,我在gradle中添加了它。构建文件并将一些代码写入应用程序类 但在运行应用程序后,向我显示强制关闭错误和未启动应用程序 gradle.build: implementation 'com.android.support:multidex:1.0.3' implementation 'com.android.support:multidex-instrumentation:1.0.3' abstract class BaseA
类
但在运行应用程序后,向我显示强制关闭错误和未启动应用程序
gradle.build:
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.android.support:multidex-instrumentation:1.0.3'
abstract class BaseActivity : AppCompatActivity() {
/**
* Set your page layout when initialize `layoutId`, Ex. R.layout.activity_main
*/
abstract var layoutId: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(layoutId)
}
/**
* With below method, we can set custom font to all of activities
*/
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
}
基本活动类:
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.android.support:multidex-instrumentation:1.0.3'
abstract class BaseActivity : AppCompatActivity() {
/**
* Set your page layout when initialize `layoutId`, Ex. R.layout.activity_main
*/
abstract var layoutId: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(layoutId)
}
/**
* With below method, we can set custom font to all of activities
*/
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
}
应用程序类:
import android.app.Activity
import android.app.Application
import android.content.Context
import android.os.Bundle
import androidx.multidex.MultiDex
import com.adjust.sdk.Adjust
import com.adjust.sdk.AdjustConfig
import com.adjust.sdk.LogLevel
import com.app.android.R
import com.app.android.utils.ADJUST_APP_TOKEN
import com.crashlytics.android.Crashlytics
import com.crashlytics.android.answers.Answers
import com.crashlytics.android.answers.ContentViewEvent
import com.google.android.gms.analytics.GoogleAnalytics
import com.google.android.gms.analytics.HitBuilders
import com.google.android.gms.analytics.Tracker
import io.fabric.sdk.android.Fabric
import io.github.inflationx.calligraphy3.CalligraphyConfig
import io.github.inflationx.calligraphy3.CalligraphyInterceptor
import io.github.inflationx.viewpump.ViewPump
class App : Application() {
private var adjustEnvironment: String = ""
private lateinit var adjustConfig: AdjustConfig
private lateinit var analytics: GoogleAnalytics
private lateinit var tracker: Tracker
override fun onCreate() {
super.onCreate()
//Calligraphy
ViewPump.init(
ViewPump.builder().addInterceptor(
CalligraphyInterceptor(
CalligraphyConfig.Builder().setDefaultFontPath("fonts/IranSans.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
)
).build()
)
//GoodPres
GoodPrefs.init(applicationContext)
//Fabric initialize kits
val fabric = Fabric.Builder(this)
.kits(Answers())
// .kits(Crashlytics())
.debuggable(true)
.build()
Fabric.with(fabric)
//Adjust
adjustEnvironment = AdjustConfig.ENVIRONMENT_PRODUCTION
adjustConfig = AdjustConfig(this, ADJUST_APP_TOKEN, adjustEnvironment, true)
adjustConfig.setSendInBackground(true)
adjustConfig.setLogLevel(LogLevel.SUPRESS)
Adjust.onCreate(adjustConfig)
registerActivityLifecycleCallbacks(AdjustLifecycleCallbacks())
//Google Analytics
analytics = GoogleAnalytics.getInstance(this)
}
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
//Adjust lifecycle method
private class AdjustLifecycleCallbacks : Application.ActivityLifecycleCallbacks {
override fun onActivityResumed(activity: Activity) {
Adjust.onResume()
}
override fun onActivityPaused(activity: Activity) {
Adjust.onPause()
}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle) {}
override fun onActivityStarted(activity: Activity) {}
}
@Synchronized
fun getDefaultTracker(): Tracker {
if (tracker == null) {
tracker = analytics.newTracker(R.xml.global_tracker)
}
return tracker
}
fun anserTracker(name: String, type: String, id: String) {
Answers.getInstance().logContentView(
ContentViewEvent()
.putContentName(name)
.putContentType(type)
.putContentId(id)
)
}
fun googleTracker(category: String, action: String, label: String) {
val tracker: Tracker = getDefaultTracker()
tracker.send(
HitBuilders.EventBuilder()
.setCategory(category)
.setAction(action)
.setLabel(label)
.build()
)
}
错误消息:
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
at com.app.android.ui.App$AdjustLifecycleCallbacks.onActivityCreated(Unknown Source:7)
at android.app.Application.dispatchActivityCreated(Application.java:221)
at android.app.Activity.onCreate(Activity.java:1071)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:147)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:317)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
at com.app.android.ui.base.BaseActivity.onCreate(BaseActivity.kt:16)
显示此行的错误:import androidx.multidex.multidex
如何解决此问题?尝试在应用程序类中扩展
多索引应用程序()
,而不是应用程序()
编辑
好的,因为答案在同一个答案中,但在评论中,如果其他人需要,我会更新此答案:
也可以试试这个:
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {}
而不是
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
如果您在我的评论中看到捆绑包标记为“?”请尝试在应用程序类中扩展
MultiDexApplication()
,而不是Application()
编辑
好的,因为答案在同一个答案中,但在评论中,如果其他人需要,我会更新此答案:
也可以试试这个:
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {}
而不是
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
如果您看到我的评论中的bundle标记为“?”
这里的savedInstanceState参数也应该可以为null(Bundle?)
这里的savedInstanceState参数应该可以为null(Bundle?),而且您必须使Bundle在基本活动中可以为null。它不是可为空的atm,所以这就是你的应用程序崩溃的原因。@Umair,你能用我上面的代码给我发送代码吗?请告诉我你的应用程序类中的第221行是什么。可能有错误。@Umair,我在应用程序类中没有第221行@Umair,221行具有来自android软件包的应用程序类。代码为:
/*package*/void dispatchActivityCreated(Activity Activity,Bundle savedInstanceState){Object[]callbacks=collectActivityLifecycleCallbacks();if(callbacks!=null){for(int i=0;i您必须使您的捆绑包在基本活动中可为空。它不是可为空的atm,所以这就是您的应用程序崩溃的原因。@Umair,您可以用我上面的代码给我发送代码吗?请告诉我您的应用程序类中的第221行是什么。可能有错误。@Umair,我在应用程序类中没有第221行!@Umair,221行有应用程序!@Umair,221行有应用程序android软件包中的ion类。代码为:/*package*/void dispatchActivityCreated(Activity Activity,Bundle savedInstanceState){Object[]callbacks=collectActivityLifecycleCallbacks();if(callbacks!=null){for(int i=0;ii尝试此操作,但对我无效。删除此行时:egisterActivityLifecycleCallbacks(AdjustLifecycleCallbacks())
不显示任何错误尝试此操作:覆盖活动中的乐趣安全状态(活动:活动,超出状态:捆绑?{}
而不是“覆盖活动中的乐趣安全状态”(activity:activity,outState:Bundle){}`如果您看到我的评论中的Bundle标记为“”,我会尝试此操作,但不会影响我。删除此行时:egisterActivityLifecycleCallbacks(AdjustLifecycleCallbacks())
不显示任何错误尝试此操作:覆盖activitySaveInstanceState上的乐趣(activity:activity,outState:Bundle?{}
而不是`override-fun-onActivitySaveInstanceState(activity:activity,outState:Bundle){}`如果您在我的注释中看到Bundle标记为“”