-1

1 つの Android アプリケーションを開発する必要があります。

ここで、カスタム グリッドビュー アダプター クラスを作成する必要があります。

しかし、次のエラーが発生しています:

      06-14 14:56:26.676: E/AndroidRuntime(797): Caused by: java.lang.NullPointerException
     06-14 14:56:26.676: E/AndroidRuntime(797):     at        com.bestinuk.adapter.CategoriesAdapter.getCount(CategoriesAdapter.java:34)
   06-14 14:56:26.676: E/AndroidRuntime(797):   at android.widget.GridView.setAdapter(GridView.java:180)
    06-14 14:56:26.676: E/AndroidRuntime(797):  at com.example.androidbestinuk.HomePage.onCreate(HomePage.java:43)

私は以下のようなアダプタークラスを書きました:

  public class CategoriesAdapter extends BaseAdapter {

private Activity activity;

カテゴリを一覧表示します。プライベート静的 LayoutInflater インフレータ = null;

public CategoriesAdapter(Activity a, List<Category> categories) {
    activity = a;
   this.categories=categories;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {
    return categories.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;

    if(convertView==null)
        vi = inflater.inflate(R.layout.list_item, null);
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.categoryimage);
    TextView title = (TextView)vi.findViewById(R.id.categorytitle); // title


    Category categorylist = (Category) getItem(position);

    title.setText(categorylist.getmCategoryName());




    thumb_image.setImageBitmap(categorylist.getmCategoryImage());

    return vi;
   }
    }

ここで、なぜ abovr エラーが発生するのですか ???

これらのエラーを解決するにはどうすればよいですか???

これらの解決策を教えてください???

編集:

はい、私のリストは null です。そのため、null ポインター例外が発生しています。

これは私の HomePage.java クラスです:

  public class HomePage extends Activity {

      List<Category> categories = new ArrayList<Category>();;
          GridView category_list;
            CategoriesAdapter categoryViewAdapter;
          private ProgressDialog pDialog;
           static final String URL = "http://dev.mercuryminds.com/xctesting/feed.xml";

           /** Called when the activity is first created. */
              @Override
                public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                 setContentView(R.layout.main);

              category_list = (GridView) findViewById(R.id.categorylist);

               GetXMLTask task = new GetXMLTask(this);
             task.execute(new String[] { URL });

                }



            //private inner class extending AsyncTask
           private class GetXMLTask extends AsyncTask<String, Void, Document> {
                private Activity context;
             public GetXMLTask(Activity context) {
                  this.context = context;

             } 
             @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Create a progressbar
            pDialog = new ProgressDialog(HomePage.this);
            // Set progressbar title
            pDialog.setTitle("BestinUk");
            // Set progressbar message
            pDialog.setMessage("Loading...");
            pDialog.setIndeterminate(false);
            // Show progressbar
            pDialog.show();
                    }
                @Override
            protected Document doInBackground(String... urls) {
                Document dom = null;
                String xml = null;
                for (String url : urls) {
                    xml = getXmlFromUrl("http://dev.mercuryminds.com/xctesting/feed.xml");
                    dom= XMLfunctions.XMLfromString(xml);
                    }
                return dom;
            }

                @Override
              protected void onPostExecute(Document dom) {

    Category categoryBean = null;

                if(dom !=null) {
            Element root = dom.getDocumentElement();
            NodeList categoryNL = root.getElementsByTagName("Category");
            if(categoryNL.getLength() > 0){
                for (int i=0;i<categoryNL.getLength();i++){
                    Node categoryNode = categoryNL.item(i);
                    Element categoryElmt = null;
                    if(categoryNode.hasAttributes()){
                        categoryBean = new Category();

                        categoryElmt = (Element)categoryNode;
                        categoryBean.setmCategoryName(categoryElmt.getAttribute("title"));
                        categoryBean.setmCategoryID(Integer.parseInt(categoryElmt.getAttribute("categoryid")));
                        categoryBean.setmCategoryImageLink(categoryElmt.getAttribute("image"));
   categories.add(categoryBean);
                        categoryViewAdapter = new CategoriesAdapter(HomePage.this, categories);

                        category_list.setAdapter(categoryViewAdapter);
                        System.out.println("Category Title is "+ " "+categoryElmt.getAttribute("title"));
                        System.out.println("Category Image is "+ " "+categoryElmt.getAttribute("image"));
                    }

        -----------
        ------------
          ---------
               pDialog.dismiss();
            }

           }

現在、次のエラーが発生しています:

06-14 16:00:21.076: E/AndroidRuntime(1305): FATAL EXCEPTION: main
06-14 16:00:21.076: E/AndroidRuntime(1305): java.lang.ClassCastException: java.lang.Integer cannot be cast to com.example.androidbestinuk.Category
   06-14 16:00:21.076: E/AndroidRuntime(1305):  at com.bestinuk.adapter.CategoriesAdapter.getView(CategoriesAdapter.java:56)

これは私の56行目です:

 Category categorylist = (Category) getItem(position);

私のコードで何が問題なのですか??? 解決策を教えてください???

以下の行を追加した後に出力を得ました:

 Category categorylist = categories.get(position);
4

4 に答える 4

2

*編集* add() を使用して、リストにコンテンツを追加できます。

- 変化する

private List<Category> categories;

private List<Category> categories = new List<Category>();

(申し訳ありませんが、List はインターフェイスであるため、インスタンス化できません)

于 2013-06-14T09:34:38.357 に答える
0

このエラーは、カテゴリ リストが null であることを意味します

あなたのカテゴリパラメータがnullかどうか、CategoriesAdapterを新しくしたコードをチェックしてください

于 2013-06-14T09:43:38.647 に答える