2014-04-17 15 views
6

जोड़ें मैंने अभी एंड्रॉइड प्रोग्रामिंग सीखना शुरू कर दिया है। मैं एक खाली गतिविधि के साथ एक नई परियोजना (एपीआई 19) बनाया है और इस तरह एक imageView जोड़ने की कोशिश की: (MainActivity के onCreate में())एंड्रॉइड प्रोग्रामेटिक रूप से ImageView

setContentView(R.layout.activity_main); 
View view = (View) findViewById(R.layout.activity_main); 
LinearLayout picLL = new LinearLayout(MainActivity.this); 
picLL.layout(0, 0, 100, 100); 
picLL.setLayoutParams(new LayoutParams(100, 100)); 
picLL.setOrientation(LinearLayout.HORIZONTAL); 
((ViewGroup) view).addView(picLL); // <- This is line 36 
ImageView myImage = new ImageView(this); 
myImage.setImageResource(R.drawable.ic_launcher); 
picLL.addView(myImage); 

हालांकि ऐप्लिकेशन क्रैश तुरंत शुरुआत के बाद। मैंने स्टैक ओवरफ्लो से कई अन्य उत्तरों की कोशिश की है, लेकिन कोई भी काम नहीं किया है। वहाँ ... कुछ मुझे याद आ रही हो रहा है

यह LogCat उत्पादन होता है:

04-17 10:02:35.611: E/AndroidRuntime(1402): FATAL EXCEPTION: main 
04-17 10:02:35.611: E/AndroidRuntime(1402): Process: com.example.test, PID: 1402 
04-17 10:02:35.611: E/AndroidRuntime(1402): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.os.Looper.loop(Looper.java:136) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at java.lang.reflect.Method.invoke(Method.java:515) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at dalvik.system.NativeStart.main(Native Method) 
04-17 10:02:35.611: E/AndroidRuntime(1402): Caused by: java.lang.NullPointerException 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at com.example.test.MainActivity.onCreate(MainActivity.java:36) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.Activity.performCreate(Activity.java:5231) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  ... 11 more 
04-17 10:02:38.771: I/Process(1402): Sending signal. PID: 1402 SIG: 9 
+0

MainActivity.java की 36 वीं पंक्ति क्या है? – nKn

+0

((व्यू ग्रुप) देखें) .addView (picLL); – Atomix

+1

यही वह जगह है जहां आपकी त्रुटि है, यह 'NullPointerException' देता है क्योंकि आप' शून्य 'जैसी किसी चीज़ को' व्यू 'जोड़ रहे हैं। इसके बजाय, किसी भी तरह अपने 'गतिविधि_माइन' में रूट 'लीनियरलाउट' नाम दें, 'getViewById()' विधि का उपयोग अपनी 'ऑनक्रेट()' विधि में करें और' ViewGroup' – nKn

उत्तर

11

यह इसलिए होता है क्योंकि आप लेआउट के आईडी से View खोजने की कोशिश कर रहे हैं।

View view = (View) findViewById(R.layout.activity_main); 

आपके पास दो विकल्प: आप activity_main.xml में मूल तत्व के लिए किसी भी आईडी जोड़ सकते हैं। उदाहरण के लिए यह root_layout_id होगा। फिर आप इसे पा सकते हैं:

View view = (View) findViewById(R.id.root_layout_id); 

दूसरा विकल्प प्रोग्रामिंग रूप से लेआउट बनाना है। अपनी ऑनक्रेट() विधि को इस तरह बदलें:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LinearLayout picLL = new LinearLayout(this); 
     picLL.layout(0, 0, 100, 100); 
     picLL.setLayoutParams(new LayoutParams(100, 100)); 
     picLL.setOrientation(LinearLayout.HORIZONTAL); 
     ImageView myImage = new ImageView(this); 
     myImage.setImageResource(R.drawable.ic_launcher); 
     picLL.addView(myImage); 
     setContentView(picLL); 
    } 
+0

के बजाय '.addView()' का उपयोग करें धन्यवाद, दूसरा दृष्टिकोण मेरे लिए काम किया! – Atomix

संबंधित मुद्दे