我正在尝试制作一个从mysql数据库检索具有相应图像的菜单类别列表并将其显示在listview(R.id.list)中的应用程序。单击列表项时,将再次在listview(R.id.listMenuItem)中显示特定类别下的食物项。

图像的路径存储在数据库中。我按照以下链接用图像和texviews填充listview

http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/https://github.com/thest1/LazyList

我已经使用Imageloader类和lazyAdapter类对图像进行lazloading。
我成功显示了第一个列表视图,并按照相同的步骤在onclick事件中加载了第二个列表视图。

但是,我的应用程序在单击列表项时崩溃。被单击的项的ID正在通过Intent(我检查过)传递。调试应用程序会告诉我“ jar adt-bundle-windows \ sdk \ platforms \ android 4.2 \ android .jar没有源附件”

我的活动加载列表视图是

public class MenuItemActivity extends Activity {

ArrayList<HashMap<String, String>> MenuItem  ;
    ListView listviewMenuItem;
    LazyAdapterMenuItem adapter;
    String menu_item_image_url ="http://10.0.2.2/Restaurant/Images/Item_Menu/";

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
     MenuItem = new ArrayList<HashMap<String, String>>();
     setContentView(R.layout.menu_item_list);   // set the Layout
     Bundle extras = getIntent().getExtras();
     String menuCategclickedItem="";
     if(extras!=null)
      {
         menuCategclickedItem=extras.getString("MCat_ID");
         Toast.makeText(MenuItemActivity.this,menuCategclickedItem+" hi item selected", Toast.LENGTH_LONG).show();
      }
     GetMenuItemImageURL objgetMenuItemImageURL = new GetMenuItemImageURL();
     objgetMenuItemImageURL.execute(menuCategclickedItem);
}


GetMenuItemImageURL是一个异步任务,用于获取从db关联的图像和数据,并添加到哈希映射“ map”。在onPostExecute中,我具有设置列表适配器的代码。

protected void onPostExecute(final ArrayList<HashMap<String, String>> menuItem)
{
    listviewMenuItem=(ListView)findViewById(R.id.listMenuItem);
    adapter=new LazyAdapterMenuItem(MenuItemActivity.this, menuItem);
    listviewMenuItem.setAdapter(adapter);

    listviewMenuItem.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            TextView tv = (TextView)view.findViewById(R.id.menu_single_item_id);
            String pos = tv.getText().toString();
            Intent in = new Intent(MenuItemActivity.this,ViewDetailsActivity.class);
            in.putExtra("ItemCode",pos);
            startActivity(in);

        }});

}
}


LazyAdapterMenuItem类如下

 public class LazyAdapterMenuItem  extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String,String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader;



    public LazyAdapterMenuItem(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.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.menu_category_item, null);

        TextView textID=(TextView)vi.findViewById(R.id.menu_item_id);
        TextView textName=(TextView)vi.findViewById(R.id.menu_name);
        TextView textCost=(TextView)vi.findViewById(R.id.menu_item_cost);
        ImageView image=(ImageView)vi.findViewById(R.id.image);

        HashMap<String, String> MenuItem = new HashMap<String, String>();
        MenuItem= data.get(position);

        textID.setText(MenuItem.get("ItemCode"));
        textName.setText(MenuItem.get("ItemName"));
        textCost.setText(MenuItem.get("MaxPrice"));
        imageLoader.DisplayImage(MenuItem.get("Image_Path"),image);
        return vi;
    }
}


在调试时,LazyAdapter的getView会引发异常。正如许多帖子所建议的那样,它返回的是ConcertView而不是null。

我的logcat看起来像这样

E/AndroidRuntime(1641): FATAL EXCEPTION: main
E/AndroidRuntime(1641): java.lang.NullPointerException
E/AndroidRuntime(1641):at    com.premier.premierrestaurant.LazyAdapterMenuItem.getView(LazyAdapterMenuItem.java:63)
E/AndroidRuntime(1641):     at android.widget.AbsListView.obtainView(AbsListView.java:2159)
E/AndroidRuntime(1641):     at android.widget.ListView.makeAndAddView(ListView.java:1831)
E/AndroidRuntime(1641):     at android.widget.ListView.fillDown(ListView.java:674)
E/AndroidRuntime(1641):     at android.widget.ListView.fillFromTop(ListView.java:735)
E/AndroidRuntime(1641):     at android.widget.ListView.layoutChildren(ListView.java:1652)
E/AndroidRuntime(1641):     at android.widget.AbsListView.onLayout(AbsListView.java:1994)
E/AndroidRuntime(1641):     at android.view.View.layout(View.java:14003)
E/AndroidRuntime(1641):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
E/AndroidRuntime(1641):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
E/AndroidRuntime(1641):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
E/AndroidRuntime(1641):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
E/AndroidRuntime(1641):     at android.view.View.layout(View.java:14003)
E/AndroidRuntime(1641):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
E/AndroidRuntime(1641):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(1641):     at android.view.View.layout(View.java:14003)
E/AndroidRuntime(1641):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
E/AndroidRuntime(1641):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
E/AndroidRuntime(1641):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
E/AndroidRuntime(1641):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
E/AndroidRuntime(1641):     at android.view.View.layout(View.java:14003)
E/AndroidRuntime(1641):     at android.view.ViewGroup.layout(ViewGroup.java:4375)
E/AndroidRuntime(1641):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)


有人可以帮帮我吗...我是android的新手。

(我正在Windows 7 android 4.2上运行Eclipse IDE)

最佳答案

我提供的评论中提供了解决方案,因此该问题可以正式标记为“已解决”。我问:


  menu_category_item.xml是否具有ID为menu_item_cost的TextView?


显然不是。如您所知,findViewById()无法找到未附加到当前活动的视图,您只需要提醒一下。

10-07 19:16
查看更多