Попытка вызвать виртуальный метод

Я пытаюсь получить LinearLayouts в моем onCreateView но мое приложение разбивается со следующим сообщением:

 23430-23430/? W/System.err﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 

Вот код:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); new Body().execute(); card01 = (LinearLayout) getView().findViewById(R.id.card01); card02 = (LinearLayout) getView().findViewById(R.id.card02); card03 = (LinearLayout) getView().findViewById(R.id.card03); card04 = (LinearLayout) getView().findViewById(R.id.card04); card05 = (LinearLayout) getView().findViewById(R.id.card05); card06 = (LinearLayout) getView().findViewById(R.id.card06); card01.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), "Card Clicked", Toast.LENGTH_SHORT).show(); } }); return rootView; } 

Это чистый класс Fragment . Действие, которое вызывает этот Fragment , не содержит этого Fragment . Я делаю это неправильно? Должен ли Fragment всегда находиться в Activity ?

По просьбе всей AsyncTask :

  // AsyncTask private class Body extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog = new ProgressDialog(getActivity()); mProgressDialog.setTitle("Fetching your info"); mProgressDialog.setMessage("Loading..."); mProgressDialog.setIndeterminate(false); mProgressDialog.show(); } @Override protected Void doInBackground(Void... params) { Document doc; try { // Connect to the web site doc = Jsoup.connect(url).get(); // Using Elements to get the Meta data //Date of Event Elements dateElement = doc.select("span[class=date-display-single]"); //Headline of Event Elements titleElement = doc.select("h2[property=schema:name]"); //Description of Event Elements bodyElement = doc.select("div[class=field field-name-body field-type-text-with-summary field-label-hidden]"); // get the dates date1 = dateElement.eq(0).text(); date2 = dateElement.eq(1).text(); date3 = dateElement.eq(2).text(); date4 = dateElement.eq(3).text(); date5 = dateElement.eq(4).text(); date6 = dateElement.eq(5).text(); // get headlines head1 = titleElement.eq(0).text(); head2 = titleElement.eq(1).text(); head3 = titleElement.eq(2).text(); head4 = titleElement.eq(3).text(); head5 = titleElement.eq(4).text(); head6 = titleElement.eq(5).text(); // get description body1 = bodyElement.eq(0).toString(); body1 = Jsoup.parse(body1.replaceAll("<br />", "br2n")).toString(); body1 = Jsoup.parse(body1.replaceAll("</p>", "p2n")).text(); body1 = body1.replaceAll("br2n", "\n"); body1 = body1.replaceAll("p2n", "\n\n"); body2 = bodyElement.eq(1).toString(); body2 = Jsoup.parse(body2.replaceAll("<br />", "br2n")).toString(); body2 = Jsoup.parse(body2.replaceAll("</p>", "p2n")).text(); body2 = body2.replaceAll("br2n", "\n"); body2 = body2.replaceAll("p2n", "\n\n"); body3 = bodyElement.eq(2).toString(); body3 = Jsoup.parse(body3.replaceAll("<br />", "br2n")).toString(); body3 = Jsoup.parse(body3.replaceAll("</p>", "p2n")).text(); body3 = body3.replaceAll("br2n", "\n"); body3 = body3.replaceAll("p2n", "\n\n"); body4 = bodyElement.eq(3).toString(); body4 = Jsoup.parse(body4.replaceAll("<br />", "br2n")).toString(); body4 = Jsoup.parse(body4.replaceAll("</p>", "p2n")).text(); body4 = body4.replaceAll("br2n", "\n"); body4 = body4.replaceAll("p2n", "\n\n"); body5 = bodyElement.eq(4).toString(); body5 = Jsoup.parse(body5.replaceAll("<br />", "br2n")).toString(); body5 = Jsoup.parse(body5.replaceAll("</p>", "p2n")).text(); body5 = body5.replaceAll("br2n", "\n"); body5 = body5.replaceAll("p2n", "\n\n"); body6 = bodyElement.eq(5).toString(); body6 = Jsoup.parse(body6.replaceAll("<br />", "br2n")).toString(); body6 = Jsoup.parse(body6.replaceAll("</p>", "p2n")).text(); body6 = body6.replaceAll("br2n", "\n"); body6 = body6.replaceAll("p2n", "\n\n"); //cut out the date in the headlines (13 characters) if the String has something to cut //Let's hope the website stays like this if (head1.length() > 0) { head1 = head1.substring(13); } if (head2.length() > 0) { head2 = head2.substring(13); } if (head3.length() > 0) { head3 = head3.substring(13); } if (head4.length() > 0) { head4 = head4.substring(13); } if (head5.length() > 0) { head5 = head5.substring(13); } if (head6.length() > 0) { head6 = head6.substring(13); } //Get Event Labels AssetManager am = getActivity().getAssets(); bwe = BitmapFactory.decodeStream(am.open("label/bwe.jpg")); commaklar = BitmapFactory.decodeStream(am.open("label/commaklar.jpg")); // musica = BitmapFactory.decodeStream(am.open("label/musica.jpg")); doualatag = BitmapFactory.decodeStream(am.open("label/doualatag.jpg")); synestesia = BitmapFactory.decodeStream(am.open("label/synestesia.jpg")); douala = BitmapFactory.decodeStream(am.open("label/douala.jpg")); // tanzen = BitmapFactory.decodeStream(am.open("label/tanzen.jpg")); // nacht = BitmapFactory.decodeStream(am.open("label/nacht.jpg")); } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { mProgressDialog.dismiss(); try { RobotoTextView date_widget1 = (RobotoTextView) getActivity().findViewById(R.id.date01); date_widget1.setText(date1); RobotoTextView head_widget1 = (RobotoTextView) getActivity().findViewById(R.id.head01); head_widget1.setText(head1); RobotoTextView body_widget1 = (RobotoTextView) getActivity().findViewById(R.id.body1); Whitelist.simpleText().addTags("br", "p"); body_widget1.setText(body1); ImageView label1 = (ImageView) getView().findViewById(R.id.label1); if (head1.contains("BLACKWHITE")) { label1.setImageBitmap(bwe); } if (date1.contains("Do")) { ; label1.setImageBitmap(doualatag); } if (head1.contains("COMMAKLAR")) { label1.setImageBitmap(commaklar); } if (head1.toLowerCase().contains("synestesia") | head1.contains("SYNESTESIA")) { label1.setImageBitmap(synestesia); } if (label1.getDrawable() == null) { label1.setImageBitmap(douala); } RobotoTextView date_widget2 = (RobotoTextView) getActivity().findViewById(R.id.date02); date_widget2.setText(date2); RobotoTextView head_widget2 = (RobotoTextView) getActivity().findViewById(R.id.head02); head_widget2.setText(head2); RobotoTextView body_widget2 = (RobotoTextView) getActivity().findViewById(R.id.body2); body_widget2.setText(body2); ImageView label2 = (ImageView) getView().findViewById(R.id.label2); if (head2.contains("BLACKWHITE")) { label2.setImageBitmap(bwe); } if (date2.contains("Do")) { label2.setImageBitmap(doualatag); } if (head2.contains("COMMAKLAR")) { label2.setImageBitmap(commaklar); } if (head2.toLowerCase().contains("synestesia")) { label2.setImageBitmap(synestesia); } if (label2.getDrawable() == null) { label2.setImageBitmap(douala); } RobotoTextView date_widget3 = (RobotoTextView) getActivity().findViewById(R.id.date03); date_widget3.setText(date3); RobotoTextView head_widget3 = (RobotoTextView) getActivity().findViewById(R.id.head03); head_widget3.setText(head3); RobotoTextView body_widget3 = (RobotoTextView) getActivity().findViewById(R.id.body3); body_widget3.setText(body3); ImageView label3 = (ImageView) getView().findViewById(R.id.label3); if (head3.contains("BLACKWHITE")) { label3.setImageBitmap(bwe); } if (date3.contains("Do")) { label3.setImageBitmap(doualatag); } if (head3.contains("COMMAKLAR")) { label3.setImageBitmap(commaklar); } if (head3.toLowerCase().contains("synestesia")) { label3.setImageBitmap(synestesia); } if (label3.getDrawable() == null) { label3.setImageBitmap(douala); } RobotoTextView date_widget4 = (RobotoTextView) getActivity().findViewById(R.id.date04); date_widget4.setText(date4); RobotoTextView head_widget4 = (RobotoTextView) getActivity().findViewById(R.id.head04); head_widget4.setText(head4); RobotoTextView body_widget4 = (RobotoTextView) getActivity().findViewById(R.id.body4); body_widget4.setText(body4); ImageView label4 = (ImageView) getView().findViewById(R.id.label4); if (head4.contains("BLACKWHITE")) { label4.setImageBitmap(bwe); } if (date4.contains("Do")) { label4.setImageBitmap(doualatag); } if (head4.contains("COMMAKLAR")) { label4.setImageBitmap(commaklar); } if (head4.toLowerCase().contains("synestesia")) { label4.setImageBitmap(synestesia); } if (label4.getDrawable() == null) { label4.setImageBitmap(douala); } if (!head5.equals("")) { RobotoTextView date_widget5 = (RobotoTextView) getActivity().findViewById(R.id.date05); date_widget5.setText(date5); RobotoTextView head_widget5 = (RobotoTextView) getActivity().findViewById(R.id.head05); head_widget5.setText(head5); RobotoTextView body_widget5 = (RobotoTextView) getActivity().findViewById(R.id.body5); body_widget5.setText(body5); ImageView label5 = (ImageView) getView().findViewById(R.id.label5); if (head5.contains("BLACKWHITE")) { label5.setImageBitmap(bwe); } if (date5.contains("Do")) { label5.setImageBitmap(doualatag); } if (head5.contains("COMMAKLAR")) { label5.setImageBitmap(commaklar); } if (head5.toLowerCase().contains("synestesia")) { label5.setImageBitmap(synestesia); } if (label5.getDrawable() == null) { label5.setImageBitmap(douala); } } if (!head6.equals("")) { RobotoTextView date_widget6 = (RobotoTextView) getActivity().findViewById(R.id.date06); date_widget6.setText(date6); RobotoTextView head_widget6 = (RobotoTextView) getActivity().findViewById(R.id.head06); head_widget6.setText(head6); RobotoTextView body_widget6 = (RobotoTextView) getActivity().findViewById(R.id.body6); body_widget6.setText(body6); ImageView label6 = (ImageView) getView().findViewById(R.id.label6); if (head6.contains("BLACKWHITE")) { label6.setImageBitmap(bwe); } if (date6.contains("Do")) { label6.setImageBitmap(doualatag); } if (head6.contains("COMMAKLAR")) { label6.setImageBitmap(commaklar); } if (head6.toLowerCase().contains("synestesia")) { label6.setImageBitmap(synestesia); } if (label6.getDrawable() == null) { label6.setImageBitmap(douala); } } } catch (NullPointerException e) { e.printStackTrace(); } } } 

Solutions Collecting From Web of "Попытка вызвать виртуальный метод"

Изменить на

  card01 = (LinearLayout) rootView.findViewById(R.id.card01); card02 = (LinearLayout) rootView.findViewById(R.id.card02); card03 = (LinearLayout) rootView.findViewById(R.id.card03); card04 = (LinearLayout) rootView.findViewById(R.id.card04); card05 = (LinearLayout) rootView.findViewById(R.id.card05); card06 = (LinearLayout) rootView.findViewById(R.id.card06); 

Вы раздуваете макет. Виды относятся к раздутой макету. Поэтому используйте объект view для инициализации представлений в onCreateView

Фрагмент размещен в Acitvity

Вы можете использовать getView в onActivityCreated и инициализировать представления

Инициализируйте свой TextView также в onCreateView . Поскольку Asynctask является внутренним классом, вы можете обновить ui там

декларировать

  RobotoTextView date_widget2; 

Как переменная экземпляра

Затем в onCreateView

  date_widget2= (RobotoTextView) rootView.findViewById(R.id.date02); 

Вы вызываете getView() слишком рано – он вернет только представление, которое вы onCreateView() из onCreateView() .

Внутри onCreateView() используется недавно завышенный rootView вместо getView() .

Такое же NullPointerException вызванное тем, что я пытаюсь сделать компонент LayoutInflater , может быть связано с использованием LayoutInflater

 View view = LayoutInflater.from(context).inflate(R.layout.layout_index_bar, null); container = (LinearLayout) view.findViewById(R.id.indexContainer);