12

我試圖得到一些LinearLayoutsonCreateView但我的應用程序與下面的消息崩潰:試圖調用虛擬方法

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類。稱爲FragmentActivity不包含此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(); 
      } 
     } 
    } 

回答

12

更改爲

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

你膨脹的佈局。意見屬於膨脹的佈局。所以使用視圖對象onCreateView

片段初始化意見由Acitvity

託管可以在onActivityCreated使用getView和初始化意見

初始化您的TextView的也onCreateView。由於是的AsyncTask可以更新UI有一個內部類

聲明

RobotoTextView date_widget2; 

爲實例變量

然後在onCreateView

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

好感謝的。正如你所看到的,在這之前我有一個AsyncTask。我在'onPostExecute'中得到同樣的異常,但不能使用rootview。我應該把'new Body()。execute()'放在'onActivityCreated'中嗎? –

+0

@ mike.b93你在asynctask中做了什麼?取決於 – Raghunandan

+0

我解析一個網站和'onPostExecute'我將文本設置爲'TextViews' –

6

你打電話getView()太早 - 它會只返回您從onCreateView()返回的視圖。

Inside onCreateView()使用最近充氣的rootView而不是getView()

0

同樣NullPointerException,而我試圖讓一個組件擴展視圖引起的,也可能是由於使用LayoutInflater

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