I have the following initialization in my java file:
Button btnCalc = (Button) findViewById(R.id.btnCalculate);
final Button btnClearWin = (Button) findViewById(R.id.btnClear);
final Button btnSaveTrip = (Button) findViewById(R.id.btnSave);
final EditText nameOfInf = (EditText)findViewById(R.id.etName);
final EditText tollAmount = (EditText)findViewById(R.id.etToll);
final EditText showLog = (EditText)findViewById(R.id.etShowLog);
showLog.setFocusable(false);
final View lineView = (View) findViewById(R.id.vwLine);
final TextView tvTotalLabel = (TextView) findViewById(R.id.tvTotal);
final TextView tvTotalAmountLabel = (TextView) findViewById(R.id.tvTotalAmount);
final TextView tvNameLabel = (TextView) findViewById(R.id.tvName);
final TextView tvTollLabel = (TextView) findViewById(R.id.tvToll);
final RadioGroup rgTypeOfInf = (RadioGroup) findViewById(R.id.rgType);
final RadioGroup rgTypeOfTrip = (RadioGroup) findViewById(R.id.rgTripType);
Originally everything was working fine until I moved some of the objects to a different layout which is no longer in main
layout file and now my application FC when it's opening.
The following are in a different layout, result.xml
. Do I have to initialize them separately?
final EditText showLog = (EditText)findViewById(R.id.etShowLog);
showLog.setFocusable(false);
final Button btnClearWin = (Button) findViewById(R.id.btnClear);
final Button btnSaveTrip = (Button) findViewById(R.id.btnSave);
When I comment out the above four lines, the application opens just fine.
Logcat:
07-25 10:27:27.955: E/AndroidRuntime(13791): FATAL EXCEPTION: main
07-25 10:27:27.955: E/AndroidRuntime(13791): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.testing/com.test.testing.MainActivity}: java.lang.NullPointerException
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2356)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.ActivityThread.access$600(ActivityThread.java:150)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.os.Handler.dispatchMessage(Handler.java:99)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.os.Looper.loop(Looper.java:137)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.ActivityThread.main(ActivityThread.java:5195)
07-25 10:27:27.955: E/AndroidRuntime(13791): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 10:27:27.955: E/AndroidRuntime(13791): at java.lang.reflect.Method.invoke(Method.java:511)
07-25 10:27:27.955: E/AndroidRuntime(13791): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
07-25 10:27:27.955: E/AndroidRuntime(13791): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
07-25 10:27:27.955: E/AndroidRuntime(13791): at dalvik.system.NativeStart.main(Native Method)
07-25 10:27:27.955: E/AndroidRuntime(13791): Caused by: java.lang.NullPointerException
07-25 10:27:27.955: E/AndroidRuntime(13791): at com.test.testing.MainActivity.onCreate(MainActivity.java:51)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.Activity.performCreate(Activity.java:5104)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-25 10:27:27.955: E/AndroidRuntime(13791): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2260)
07-25 10:27:27.955: E/AndroidRuntime(13791): ... 11 more
07-25 10:27:27.963: W/ActivityManager(381): Force finishing activity com.test.testing/.MainActivity
07-25 10:27:28.517: W/ActivityManager(381): Activity pause timeout for ActivityRecord{4163fe28 u0 com.test.testing/.MainActivity}
07-25 10:27:28.666: I/qtaguid(381): Failed write_ctrl(s 0 10116) res=-1 errno=1
07-25 10:27:28.666: W/NetworkManagementSocketTagger(381): setKernelCountSet(10116, 0) failed with errno -1
07-25 10:27:38.666: W/ActivityManager(381): Activity destroy timeout for ActivityRecord{4163fe28 u0 com.test.testing/.MainActivity}
07-25 10:28:00.166: D/dalvikvm(2069): GC_CONCURRENT freed 3198K, 52% free 13534K/27904K, paused 3ms+3ms, total 29ms
07-25 10:28:00.166: D/dalvikvm(2069): WAIT_FOR_CONCURRENT_GC blocked 23ms
If you want to use views from other layout other than the main layout then you need to inflate that layout. If you do not inflate and use its views directly it will give NPE
Example Code:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout mFrame = (RelativeLayout)inflater.inflate(R.layout.results, null);
//Now you can use/reference its resources/views etc.
final EditText showLog = (EditText)mFrame.findViewById(R.id.etShowLog);
showLog.setFocusable(false);
final Button btnClearWin = (Button) mFrame.findViewById(R.id.btnClear);
final Button btnSaveTrip = (Button) mFrame.findViewById(R.id.btnSave);