as you can already see from the title my app is crashing when I am switching between fragments / tabs. I have 3 tabs, if I switch between the first and the second one multiply times nothing happens, if I do the same with the third and second or third to second and to the first one the app crashes.
If more than the following code and exception is required just tell me.
Exception:
E/AndroidRuntime:
FATAL EXCEPTION: main
Process: de.noel.networkscanner,
PID: 8493
java.lang.IllegalArgumentException:
Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, Parameter view
at de.noel.networkscanner.ui.main.FragmentDownlaod$registerListener$1.onItemSelected(Unknown
Source:7)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:1366)
at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:1355)
at android.widget.AdapterView.selectionChanged(AdapterView.java:1339)
at android.widget.AdapterView.checkSelectionChanged(AdapterView.java:1530)
at android.widget.AdapterView.handleDataChanged(AdapterView.java:1506)
at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:191)
at android.widget.Spinner.onMeasure(Spinner.java:631)
at androidx.appcompat.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:428)
at android.view.View.measure(View.java:24966)
at android.widget.GridLayout.measureChildWithMargins2(GridLayout.java:1018)
at android.widget.GridLayout.measureChildrenWithMargins(GridLayout.java:1028)
at android.widget.GridLayout.onMeasure(GridLayout.java:1067)
at android.view.View.measure(View.java:24966)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:978)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:24966)
at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1638)
at android.view.View.measure(View.java:24966)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:978)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:24966)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:24966)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:24966)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:24966)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:24966)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7139)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:992)
at android.view.View.measure(View.java:24966)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3301)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2028)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2330)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8511)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:696)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7050)
at java.lang.reflect.Method.invoke(Native
Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
My fragment classes:
class FragmentDownlaod : Fragment {
constructor() : super()
private lateinit var myView: View
private var sizeInBit = true
private var speedInBit = true
private var selectedSizeForDownloadSize = DataSizeNumbers.KILO
private var selectedSizeForDownloadSpeed = DataSizeNumbers.KILO
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
updateSpinnerItems()
this.speedSpinner.setSelection(1)
this.sizeSpinner.setSelection(1)
registerListener()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
this.myView = inflater.inflate(R.layout.download_fragement, container, false)
return this.myView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
this.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.context)
val activity = this.activity
if(activity != null) {
val display: Display = activity.windowManager.defaultDisplay
val size = Point()
display.getSize(size)
val width = size.x
this.bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888)
this.shapeDrawable = ShapeDrawable()
}
}
fragment / tab:
class FragmentConverter : Fragment { constructor() : super() private lateinit var myView: View override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { this.myView = inflater.inflate(R.layout.converter_fragement, container, false) return this.myView }
EDIT: added registerListener method:
private fun registerListener() {
textEditSize.addTextChangedListener(TextChangeWatcher(textEditSize))
textEditSpeed.addTextChangedListener(TextChangeWatcher(textEditSpeed))
sizeSpinner.onItemSelectedListener = (object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>,
view: View,
position: Int,
id: Long
) {
when (position) {
0 -> selectedSizeForDownloadSize = DataSizeNumbers.BIT
1 -> selectedSizeForDownloadSize = DataSizeNumbers.KILO
2 -> selectedSizeForDownloadSize = DataSizeNumbers.MEGA
3 -> selectedSizeForDownloadSize = DataSizeNumbers.GIGA
4 -> selectedSizeForDownloadSize = DataSizeNumbers.TERRA
}
}
override fun onNothingSelected(parent: AdapterView<*>) {
selectedSizeForDownloadSize = DataSizeNumbers.KILO
}
})
speedSpinner.onItemSelectedListener = (object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>,
view: View,
position: Int,
id: Long
) {
when (position) {
0 -> selectedSizeForDownloadSpeed = DataSizeNumbers.BIT
1 -> selectedSizeForDownloadSpeed = DataSizeNumbers.KILO
2 -> selectedSizeForDownloadSpeed = DataSizeNumbers.MEGA
3 -> selectedSizeForDownloadSpeed = DataSizeNumbers.GIGA
4 -> selectedSizeForDownloadSpeed = DataSizeNumbers.TERRA
}
}
override fun onNothingSelected(parent: AdapterView<*>) {
selectedSizeForDownloadSpeed = DataSizeNumbers.KILO
}
})
calcBtn.setOnClickListener {
if (editTextIncludesNumbers(textEditSize)) {
if (editTextIncludesNumbers(textEditSpeed)) {
speedResultView.text = Calculator.calculateTime(
getNumberFromField(textEditSize),
selectedSizeForDownloadSize,
sizeInBit,
getNumberFromField((textEditSpeed)),
selectedSizeForDownloadSpeed,
speedInBit
)
} else {
speedResultView.text = getString(R.string.noCorrectNumber_speed)
}
} else {
Log.d("edit", "is empty -> ${getString(R.string.noCorrectNumber_size)}")
speedResultView.text = getString(R.string.noCorrectNumber_size)
}
}
sizeBitByteSwitcher.setOnCheckedChangeListener { _, _ ->
sizeInBit = !sizeInBit
updateSpinnerItems()
}
speedBitByteSwitcher.setOnCheckedChangeListener { _, _ ->
speedInBit = !speedInBit
updateSpinnerItems()
}
}
Change the view: View
in your OnItemSelectedListener
s to nullable view: View?
.
It's a framework java interface with unspecified nullability so the kotlin compiler allows you to implement the interface with a different nonnull type. However at runtime the function can be called with a null argument, causing this crash when kotlin runtime checks your nonnulls are in fact not null.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.