1

mysqlデータベースから対応する画像を含むメニューカテゴリのリストを取得し、リストビュー(R.id.list)に表示するアプリを作成しようとしています。リスト項目をクリックすると、特定のカテゴリの食品項目が再びリストビュー (R.id.listMenuItem) に表示されます。

画像のパスはデータベースに保存されます。次のリンクをたどって、リストビューに画像とテキストビューを入力しました

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

Imageloader クラスと lazyAdapter クラスを使用して、画像の lazloading を使用しました。最初のリスト ビューの表示に成功し、同じ手順に従って、onclick イベントで 2 番目のリスト ビューを読み込みました。

ただし、リスト項目をクリックするとアプリがクラッシュします。クリックされた項目のIDがインテントを介して渡されます(確認しました)。アプリをデバッグすると、「 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' に追加する asynctask です。 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 で例外がスローされます。多くの投稿が示唆しているように、nullではなくconcertViewを返しています。どのような変更を加える必要はありません...

私の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 を実行しています)

4

1 に答える 1

1

この質問を正式に「解決済み」としてマークできるように、コメントにある解決策を提供しています。私は尋ねた:

menu_category_item.xmlid の TextView はありmenu_item_costますか?

どうやらそうではありませんでした。findViewById()現在のアクティビティにアタッチされていないビューを見つけることができないことはご存知のとおり、リマインダーが必要でした。

于 2012-12-18T19:00:20.063 に答える