I am trying to get some LinearLayoutsin my onCreateView but my App is crashing with the following message:
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
Here is the code:
@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;
}
This is a pure Fragment class. The Activity which calls this Fragment does not contain this Fragment. Am I doing it wrong? Should the Fragmentalways be within the Activity?
As requested the whole 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();
}
}
}
So, a reference is what a variable of a reference type contains. These variables can point to “nothing”, though, and that's what we call a null reference: a reference that doesn't point to any object. When you try to call a method or another member on the said variable, you got the NullReferenceException.
NullPointerException is thrown when a reference variable is accessed (or de-referenced) and is not pointing to any object. This error can be resolved by using a try-catch block or an if-else condition to check if a reference variable is null before dereferencing it.
What Causes NullPointerException. The NullPointerException occurs due to a situation in application code where an uninitialized object is attempted to be accessed or modified. Essentially, this means the object reference does not point anywhere and has a null value.
Change to
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);
You inflate a layout. the views belong to the inflated layout. So use the view object to initialize views in onCreateView
Fragment is hosted by a Acitvity
You can use getView in onActivityCreated and initialize views
Initialize your TextView's also in onCreateView. Since Asynctask is a inner class you can update ui there
Declare
RobotoTextView date_widget2;
as instance variable
Then in onCreateView
date_widget2= (RobotoTextView) rootView.findViewById(R.id.date02);
You're calling getView() too early - it will only return the view you return yourself from onCreateView().
Inside onCreateView() use the recently inflated rootView instead of getView().
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With