J'essaie d'obtenir un LinearLayouts
dans ma onCreateView
mais mon application plante le message suivant
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
Voici le 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;
}
Ceci est une pure classe Fragment
. La Activity
qui appelle cette Fragment
ne contient pas cette Fragment
. Est-ce que je me trompe? La Fragment
doit-elle toujours être dans la Activity
?
Comme demandé toute 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();
}
}
}
Changer en
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);
Vous gonflez une mise en page. les vues appartiennent à la mise en page gonflée. Utilisez donc l'objet view pour initialiser les vues dans onCreateView
Fragment est hébergé par un acteur
Vous pouvez utiliser getView
dans onActivityCreated
et initialiser des vues
Initialisez votre TextView aussi dans onCreateView
. Asynctask étant une classe interne, vous pouvez mettre à jour l'interface utilisateur à cet endroit.
Déclarer
RobotoTextView date_widget2;
comme variable d'instance
Puis dans onCreateView
date_widget2= (RobotoTextView) rootView.findViewById(R.id.date02);
Vous appelez getView()
trop tôt - la vue que vous vous rendez de onCreateView()
sera restituée.
Dans onCreateView()
, utilisez la rootView
récemment gonflée au lieu de getView()
.
La même NullPointerException
causée lorsque j'essaie de faire en sorte qu'un composant étende la vue, cela peut être dû à l'utilisation de LayoutInflater
View view = LayoutInflater.from(context).inflate(R.layout.layout_index_bar, null);
container = (LinearLayout) view.findViewById(R.id.indexContainer);