2013-07-25 4 views
1

У меня есть следующие инициализации в моем Java файл:Android App падает из-за добавления макета

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); 

Изначально все работало хорошо, пока я не переехал некоторые объекты на другой макет, который уже не в main файл макета и теперь мое приложение FC, когда оно открывается.

Следующие макеты: result.xml. Нужно ли их инициализировать отдельно?

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); 

Когда я прокомментирую вышеуказанные четыре строки, приложение открывается просто отлично.

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 
+0

Что вы имеете в виду «кроме основной»? – Warpzit

+0

, пожалуйста, отправьте также вывод logcat –

+0

Вы можете инициализировать представления, которые находятся в вашем макете xml, который установлен в действие. если его в другом xml и вы пытаетесь инициализировать, вы получаете NPE. – Raghunandan

ответ

1

Если вы хотите использовать представления из другого макета, отличного от основного, то вам нужно раздуть этот макет. Если вы не раздувать и использовать свои мнения непосредственно это даст NPE

Пример кода:

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); 
+0

Я бы добавил, что под методом onCreate()? – Si8

+1

Да, вы можете убедиться, что перед использованием представлений, определенных в этом макете. Я обновил код.Также убедитесь, что вы используете соответствующий макет для mFrame. Если его LinearLayout изменит RelativeLayout на LinearLayout – Manu

+0

Спасибо, друг. Это решило эту проблему :) – Si8

1

Что я видел из кода "может быть" только этот код выдает ошибку:

showLog.setFocusable(false)

Try для проверки нулевой первых перед установкой любого значения

if (showLog != null) showLog.setFocusable(false);

+0

Вы правы, это больше не крушит. – Si8

+1

Для выполнения задания вам необходимо установить showLog.setFocusable (false) в действие, в котором вы раздуваете соответствующий макет. Поэтому вы это исправите. –

+0

У меня есть еще одна проблема. Проблема в том, что я пытаюсь отобразить некоторое значение в другом файле макета при нажатии на текущий файл макета. У вас есть письмо, на которое я могу отправить свой код Java? – Si8

0

После перемещения или переименования файлов или ресурсов вам необходимо очистить и построить проект для новых ссылок.

+0

это не имеет ничего общего с NPE. – Raghunandan

+0

-1: это не имеет ничего общего с ошибкой. –

+0

Уверен, если объект не может быть инициализирован, вы получите NPE – JavaDM

0

Для активации при использовании setcontentview (макет). Только этот вид макета xml вы можете ссылаться на свою деятельность. Для других xml вам нужно раздуть этот XML как представление.