Titanium JIRA Archive
Titanium SDK/CLI (TIMOB)

[TIMOB-24702] Android: Accessing 'size' & 'rect' button properties after activity.finish() crashes the app with java.lang.NullPointerException

GitHub Issuen/a
TypeBug
PriorityNone
StatusClosed
ResolutionFixed
Resolution Date2017-07-14T22:14:12.000+0000
Affected Version/sRelease 6.0.4
Fix Version/sRelease 6.2.0
ComponentsAndroid
Labelsn/a
ReporterLokesh Choudhary
AssigneeYordan Banev
Created2017-05-17T23:22:14.000+0000
Updated2017-07-20T18:35:48.000+0000

Description

Steps to reproduce:

1. Use the code below in your app.js:
var window = Titanium.UI.createWindow();
var button = Ti.UI.createButton(
{
	title: "Close Me",
	center: {x: "50%", y: "50%"},
});
button.addEventListener("click", function(e)
{
	var activity = Ti.Android.currentActivity;
	if (!activity) {
		return;
	}
	
	activity.onDestroy = function(e) {
		// Crashes when accessing "size" or "rect" property.
		var size = button.size;
		var rect = button.rect;
	};
	activity.finish();
});
window.add(button);
window.open();
(there can be more properties but I have checked size & rect here). 2. Build the app for android device. 3. After the app launches, click on Close Me button.

Actual Result:

1. The app crashes with below java.lang.NullPointerException:
[WARN] :   W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Activity.getWindow()' on a null object reference
[WARN] :   W/System.err: 	at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:296)
[WARN] :   W/System.err: 	at android.os.Handler.dispatchMessage(Handler.java:98)
[WARN] :   W/System.err: 	at org.appcelerator.kroll.common.TiMessenger.sendMessage(TiMessenger.java:323)
[WARN] :   W/System.err: 	at org.appcelerator.kroll.common.TiMessenger.sendBlockingMessage(TiMessenger.java:289)
[WARN] :   W/System.err: 	at org.appcelerator.kroll.common.TiMessenger.sendBlockingMainMessage(TiMessenger.java:164)
[WARN] :   W/System.err: 	at org.appcelerator.titanium.proxy.TiViewProxy.getSize(TiViewProxy.java:376)
[WARN] :   W/System.err: 	at org.appcelerator.kroll.runtime.v8.V8Object.nativeCallProperty(Native Method)
[WARN] :   W/System.err: 	at org.appcelerator.kroll.runtime.v8.V8Object.callProperty(V8Object.java:73)
[WARN] :   W/System.err: 	at org.appcelerator.kroll.KrollProxy.callPropertySync(KrollProxy.java:672)
[WARN] :   W/System.err: 	at org.appcelerator.titanium.TiBaseActivity.dispatchCallback(TiBaseActivity.java:1194)
[WARN] :   W/System.err: 	at org.appcelerator.titanium.TiBaseActivity.onDestroy(TiBaseActivity.java:1525)
[WARN] :   W/System.err: 	at org.appcelerator.titanium.TiLaunchActivity.onDestroy(TiLaunchActivity.java:460)
[WARN] :   W/System.err: 	at org.appcelerator.titanium.TiRootActivity.onDestroy(TiRootActivity.java:204)
[WARN] :   W/System.err: 	at android.app.Activity.performDestroy(Activity.java:6422)
[WARN] :   W/System.err: 	at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1142)
[WARN] :   W/System.err: 	at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3818)
[WARN] :   W/System.err: 	at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3849)
[WARN] :   W/System.err: 	at android.app.ActivityThread.-wrap5(ActivityThread.java)
[WARN] :   W/System.err: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398)
[WARN] :   W/System.err: 	at android.os.Handler.dispatchMessage(Handler.java:102)
[WARN] :   W/System.err: 	at android.os.Looper.loop(Looper.java:148)
[WARN] :   W/System.err: 	at android.app.ActivityThread.main(ActivityThread.java:5417)
[WARN] :   W/System.err: 	at java.lang.reflect.Method.invoke(Native Method)
[WARN] :   W/System.err: 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
[WARN] :   W/System.err: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
[WARN] :   TiExceptionHandler: (main) [2096,2096] Activity is null or already finishing, skipping dialog.
[ERROR] :  V8Exception: Exception occurred at /app.js:1: Uncaught Attempt to invoke virtual method 'android.view.Window android.app.Activity.getWindow()' on a null object reference
[ERROR] :  V8Exception: Attempt to invoke virtual method 'android.view.Window android.app.Activity.getWindow()' on a null object reference

Actual Results:

1. The app should not crash.

Comments

  1. Gary Mathews 2017-05-30

    master: https://github.com/appcelerator/titanium_mobile/pull/9096
  2. Samir Mohammed 2017-07-20

    Verified fix in SDK Version: 6.2.0.v20170719160617. Test and other information an be found at: https://github.com/appcelerator/titanium_mobile/pull/9096

JSON Source