2013-11-15 104 views
0

我想通過從數據庫中提取數據來在網格視圖中顯示數據(圖像和文本)。我試圖首先在數據庫表中插入數據並嘗試從數據庫獲取數據並在gridview中顯示它。如何在gridview中顯示數據庫獲取的數據?

這是我的主要活動

public class MainActivity extends Activity { 

     private RelativeLayout rl; 

     private Tab TabOrder; 



     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 


      rl = (RelativeLayout) findViewById(R.id.mainLayout); 

      ActionBar actionbar = getActionBar(); 
      actionbar.setTitle("Select To Order"); 
      actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

      TabOrder = actionbar.newTab().setText("ORDER"); 


      Fragment FragmentOrder = new FragmentOrder(); 

      TabOrder.setTabListener(new MyTablistenerClass(FragmentOrder)); 

      actionbar.addTab(TabOrder); 

     } 

     @SuppressLint("ValidFragment") 
     public class FragmentOrder extends Fragment{ 


      private Context context; 
      private int layoutResourceId; 
      private ArrayList<Category> data; 
      ArrayList<Category> imageArry = new ArrayList<Category>(); 
      OrderAdapter adapter; 
      private ArrayList<Category> categories; 


      @SuppressLint("NewApi") 
      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
       View view = inflater.inflate(R.layout.griddeal, null); 




       DatabaseManager db = new DatabaseManager(MainActivity.this); 
       // get image from drawable 
    //   Bitmap image = BitmapFactory.decodeResource(getResources(), 
    //     R.drawable.car); 
    // 
    //   // convert bitmap to byte 
    //   ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    //   image.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
    //   byte imageInByte[] = stream.toByteArray(); 
       /** 
       * CRUD Operations 
       * */ 
       // Inserting Contacts 
       Log.d("Insert: ", "Inserting .."); 


       Category c1 = new Category(); 
       c1.setCategorydescription("vegetables"); 


       Bitmap image = BitmapFactory.decodeResource(getResources(), 
         R.drawable.car); 

       // convert bitmap to byte 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       image.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
       byte imageInByte[] = stream.toByteArray(); 
       db.insertCategoriesDetail(c1); 
       //db.insertCategoriesDetail(new Category("Vegetables", imageInByte)); 
       // display main List view bcard and contact name 

       // Reading all contacts from database 
       List<Category> categories = db.getCategoriesDetail(); 
       for (Category cn : categories) { 
        String log = "ID:" + cn.getId() + " Name: " + cn.getCategorydescription() 
          + " ,Image: " + cn.getCategoryimage(); 

        // Writing Contacts to log 
        Log.d("Result: ", log); 
        //add contacts data in arrayList 
        imageArry.add(cn); 

       } 
       adapter = new OrderAdapter(MainActivity.this, R.layout.griddealitems, 
         imageArry); 
       GridView dataList = (GridView) findViewById(R.id.GridDeal); 
       dataList.setAdapter(adapter); 

       dataList.setOnItemClickListener(new OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> arg0, View arg1, 
          int arg2, long arg3) { 
         // TODO Auto-generated method stub 

        } 
       }); 
       return view; 
      } 
     } 

     public class OrderAdapter extends ArrayAdapter<Category>{ 
       Context context; 
       int layoutResourceId; 
       // BcardImage data[] = null; 
       ArrayList<Category> data=new ArrayList<Category>(); 

       public OrderAdapter(Context context, int layoutResourceId, ArrayList<Category> data) { 
        // TODO Auto-generated constructor stub 
        super(context, layoutResourceId, data); 
        this.layoutResourceId = layoutResourceId; 
        this.context = context; 
        this.data = data; 
       } 

       @Override 
       public View getView(int position, View convertView, ViewGroup parent) { 
        View row = convertView; 
        ImageHolder holder = null; 

        if(row == null) 
        { 
         LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
         row = inflater.inflate(layoutResourceId, parent, false); 

         holder = new ImageHolder(); 
         holder.grid_deal_text = (TextView)row.findViewById(R.id.grid_deal_text); 
         holder.imgIcon = (ImageView)row.findViewById(R.id.grid_deal_image); 
         row.setTag(holder); 
        } 
        else 
        { 
         holder = (ImageHolder)row.getTag(); 
        } 

        Category picture = data.get(position); 
        holder.grid_deal_text.setText(picture.categorydescription); 
        //convert byte to bitmap take from contact class 

        byte[] outImage=picture.categoryimage; 
        ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage); 
        Bitmap theImage = BitmapFactory.decodeStream(imageStream); 
        holder.imgIcon.setImageBitmap(theImage); 
        return row; 

       } 

       public class ImageHolder 
       { 
        ImageView imgIcon; 
        TextView grid_deal_text; 
       } 
     } 


     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 



     public class MyTablistenerClass implements android.app.ActionBar.TabListener { 

      Fragment fragment1; 

      @SuppressLint("NewApi") 
      public MyTablistenerClass(Fragment fragment){ 
       this.fragment1 = fragment; 
      } 


      @Override 
      public void onTabReselected(Tab tab, FragmentTransaction ft) { 
       // TODO Auto-generated method stub 

      } 
      @SuppressLint("NewApi") 
      @Override 
      public void onTabSelected(Tab tab, FragmentTransaction ft) { 
       // TODO Auto-generated method stub 


       FragmentTransaction fragMentTra; 


        ActionBar actionBar = getActionBar(); 
        actionBar.show(); 
        actionBar.setTitle("Select Category"); 

        //actionBar.setIcon(R.id.search); 
        FragmentOrder Fram2 = new FragmentOrder(); 
        //fragMentTra.addToBackStack(null); 
        fragMentTra = getFragmentManager().beginTransaction(); 
        fragMentTra.add(rl.getId(), Fram2); 
        fragMentTra.commit(); 


      } 

      @Override 
      public void onTabUnselected(Tab tab, FragmentTransaction ft) { 

      } 

     } 

    } 

這是我的DatabaseManager類:

public class DatabaseManager { 

     private Context context = null; 
     private SQLiteDatabase database=null; 
     private DatabaseHelper dbHelper=null; 


     public DatabaseManager(Context context) { 
      this.context = context; 
      dbHelper = new DatabaseHelper(context); 
     } 

     public void open() throws SQLException { 
      if (dbHelper==null) { 
       dbHelper = new DatabaseHelper(context); 
      } 
      if (database==null) { 
       database = dbHelper.getWritableDatabase(); 
      } 
     } 

     public void close() { 
      dbHelper.close(); 
      database = null; 
      dbHelper = null;  
     } 

     public long insertCategoriesDetail(Category categorydetail){ 

      long result = 0; 

      try{ 

       if (database==null) { 
        open(); 
       } 
       ContentValues values = new ContentValues(); 
       values.put(DatabaseContract.RetailDatabaseEntry.COLUMN_CATEGORYDESCRIPTION, categorydetail.getCategorydescription()); 
       values.put(DatabaseContract.RetailDatabaseEntry.COLUMN_CATEGORYIMAGE, categorydetail.getCategoryimage()); 

       result = database.insert(DatabaseContract.RetailDatabaseEntry.TABLE_NAME_CATEGORY, null, values); 
       Toast.makeText(context, "Res : " + result, Toast.LENGTH_SHORT).show(); 
       close(); 
      }catch(Exception ex){ 
       Toast.makeText(context, "crashed" + ex.toString(), Toast.LENGTH_SHORT).show(); 

      } 

      return result; 

     } 


     public List<Category> getCategoriesDetail() { 

      if (database==null) { 
       open(); 
      } 

      List<Category> categoriesdetailsList = new ArrayList<Category>(); 
      // Select All Query 
      String selectQuery = "SELECT * FROM " + DatabaseContract.RetailDatabaseEntry.TABLE_NAME_CATEGORY; 

      Cursor cursor = database.rawQuery(selectQuery, null); 

      // looping through all rows and adding to list 
      if (cursor.moveToFirst()) { 
       do { 
        Category detailList = new Category(); 

        detailList.setId(Integer.parseInt(cursor.getString(0))); 
        detailList.setCategorydescription(cursor.getString(1)); 

        detailList.setCategoryimage(cursor.getBlob(2)); 

        categoriesdetailsList.add(detailList); 

       } while (cursor.moveToNext()); 
      } 

      close(); 
      return categoriesdetailsList; 
     } 

    } 

的logcat:

11-15 16:57:39.127: E/AndroidRuntime(703): FATAL EXCEPTION: main 
11-15 16:57:39.127: E/AndroidRuntime(703): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.orderdatabase/com.example.orderdatabase.MainActivity}: java.lang.NullPointerException 
11-15 16:57:39.127: E/AndroidRuntime(703): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 

不管我做的是不working.I我得到NullPointerException異常。 請有人告訴我,我錯在哪裏。

謝謝。

+0

後logcat的跟蹤 – WOLVERINE

+0

更新我的logcat的問題.. –

+0

其NPE的人..嘗試找出未初始化的一些對象... –

回答

0

您可以使用下面的示例解決您的問題。

public List<UserInfo> getUerInfoDetails() { 
      SQLiteDatabase db; 
      db=getReadableDatabase(); 

      List<UserInfo> userInfoList=new ArrayList<UserInfo>(); 

      // Select All Query 
      String selectQuery = "SELECT * FROM mainToDo"; 

      Cursor cursor =db.rawQuery(selectQuery, null); 

      // looping through all rows and adding to list 
      while(cursor.moveToNext()) 
      { 
       UserInfo obj=new UserInfo(); 

      obj.setId(cursor.getInt(0)); 
      obj.setName(cursor.getString(1)); 
      userInfoList.add(obj); 

      } 
        close(); 

     return userInfoList; 
     } 
相關問題