2017-08-14 82 views
1

我可以将JSON数据保存到Realm数据库。我曾用作Realm的文档,但我无法将数据设置为GridView。我正在使用自定义适配器而不是Realm适配器。数据已记录,但不会显示给GridView。这个数据如何被检索并显示给GridView?从RealmDatabase中检索数据并将其设置为GridView

PopularDestinationGridDetail这就是JSON数据进行解析,并保存到数据库

Realm.init(this); 
     realm = Realm.getDefaultInstance(); 
    LinearAddTOFavourite.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       savetoDatabase(); 
      } 
     }); 


    public void savetoDatabase() { 

     realm.executeTransactionAsync(new Realm.Transaction() { 
      @Override 
      public void execute(Realm bgRealm) { 
       RealmDatabasePopularDestination realmDatabasePopularDestination = bgRealm.createObject(RealmDatabasePopularDestination.class); 
       realmDatabasePopularDestination.setTitle(title); 
       realmDatabasePopularDestination.setTitle(latitude); 
       realmDatabasePopularDestination.setTitle(longitude); 
       realmDatabasePopularDestination.setImage(image); 

//    Toast.makeText(this, realmDatabasePopularDestination.setLatitude(realmDatabasePopularDestination1.getLatitude())) 


      } 
     }, new Realm.Transaction.OnSuccess() { 
      @Override 
      public void onSuccess() { 

       Log.v("Success",title); 


      } 
     }, new Realm.Transaction.OnError() { 
      @Override 
      public void onError(Throwable error) { 
       Log.e("failed", error.getMessage()); 
      } 
     }); 


    } 

收藏

public class Favourites extends Fragment { 

    Realm realm; 
    GridView gridViewBookmark; 
    ArrayList<RealmDatabasePopularDestination> destination_bookmark_realm = new ArrayList<>(); 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     Realm.init(getContext()); 
     realm = Realm.getDefaultInstance(); 


     RealmDatabasePopularDestination realmDatabasePopularDestination = new RealmDatabasePopularDestination(); 


     View view = inflater.inflate(R.layout.bookmark_layout_gridview, container, false); 
     gridViewBookmark = (GridView) view.findViewById(R.id.gridviewBookmark); 
     destination_bookmark_realm.add(realmDatabasePopularDestination); 
     getData(); 
     return view; 

    } 


    public void getData() { 
     FavouriteAdapter favouriteAdapter = new FavouriteAdapter(getContext(), destination_bookmark_realm); 
     gridViewBookmark.setAdapter(favouriteAdapter); 

     RealmResults<RealmDatabasePopularDestination> result = realm.where(RealmDatabasePopularDestination.class).equalTo("Title","niyash temple").findAll(); 

     result.load(); 

     System.out.println("Result is" + result); 

//  String output = ""; 
//  for (RealmDatabasePopularDestination realmDatabasePopularDestination : result) { 
// 
// 
//   output += realmDatabasePopularDestination.toString(); 
// 
//  } 
// 
//  System.out.println("output" + output); 
//  System.out.println("Total size=" + result.size()); 

    } 

} 

getter和setter

public class RealmDatabasePopularDestination extends RealmObject { 

    String Title; 
    String Latitude; 
    String Longitude; 
    String image; 



    public String getTitle() { 
     return Title; 
    } 

    public void setTitle(String title) { 
     Title = title; 
    } 

    public String getLatitude() { 
     return Latitude; 
    } 

    public void setLatitude(String latitude) { 
     Latitude = latitude; 
    } 

    public String getLongitude() { 
     return Longitude; 
    } 

    public void setLongitude(String longitude) { 
     Longitude = longitude; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image = image; 
    } 
} 

FavouriteAdapter

public class FavouriteAdapter extends BaseAdapter { 

    Context mContext; 
    ArrayList<RealmDatabasePopularDestination> clas_realm_bookmark = null; 
    String TAG = "HomeTab_adapter"; 


    public FavouriteAdapter(Context mContext, ArrayList<RealmDatabasePopularDestination> clas_realm_bookmark) { 
     super(); 
     this.mContext = mContext; 
     this.clas_realm_bookmark = clas_realm_bookmark; 
    } 


    @Override 
    public int getCount() { 

     return clas_realm_bookmark.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return clas_realm_bookmark.get(position); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final FavouriteAdapter.Holder viewHolder; 

     if (convertView == null) { 
      // inflate the layout 
      LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      // LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
      convertView = inflater.inflate(R.layout.bookmark_grid_list_item, parent, false); 

      // well set up the ViewHolder 
      // viewHolder = new ClassScheduleStudentAdapter.Holder(); 
      viewHolder = new FavouriteAdapter.Holder(); 

      // viewHolder.popular_destintion_id = (TextView) convertView.findViewById(R.id.student_profile_subject); 
      viewHolder.title = (TextView) convertView.findViewById(R.id.festivalName); 
      viewHolder.imageLogo = (ImageView) convertView.findViewById(R.id.event_festival_main_image); 


      //  Log.d(TAG, "@@ postion:" + position + " getTeacherName" + class_destination.get(position).getId()); 
      convertView.setTag(viewHolder); 


     } else { 
      // we've just avoided calling findViewById() on resource everytime 
      // just use the viewHolder 
      // viewHolder = (ClassScheduleStudentAdapter.Holder) convertView.getTag(); 
      viewHolder = (Holder) convertView.getTag(); 
     } 

     viewHolder.title.setText(clas_realm_bookmark.get(position).getTitle()); 


     Picasso.with(mContext).load(clas_realm_bookmark.get(position).getImage()).error(R.drawable.close).into(viewHolder.imageLogo); 


     return convertView; 
    } 

    class Holder { 
     TextView title; 
     ImageView imageLogo; 

    } 


} 

我没有得到任何错误,但他们没有在ListView.This设定使用领域的第一次,所以不要在那里我做错了。

回答

0

在从数据库提取数据之前,您正在设置适配器以列出视图。

RealmResults<RealmDatabasePopularDestination> result = realm.where(RealmDatabasePopularDestination.class).equalTo("Title","niyash temple").findAll(); 
result.load(); 

FavouriteAdapter favouriteAdapter = new FavouriteAdapter(getContext(), destination_bookmark_realm); 
gridViewBookmark.setAdapter(favouriteAdapter); 

使用上面的代码和。

destination_bookmark_realm它应该是负载从DATABSE

+0

获得像这样的输出 I/System.out:结果是[RealmDatabasePopularDestination = proxy [{标题:85.3404},{纬度:空},{经度:空},{图像:http://192.168.100.7: 1337/images/popular_places/Patan-2.jpg}]] 08-14 16:05:48.704 16347-16347/org.municipality.mobile.patanheritage W/Settings:设置airplane_mode_on已从android.provider.Settings.System到android.provider.Settings.Global,返回只读值。 – Ghimire

+0

解决了它,谢谢 – Ghimire

1

而不是

public class FavouriteAdapter extends BaseAdapter { 

    Context mContext; 
    ArrayList<RealmDatabasePopularDestination> clas_realm_bookmark = null; 

了作为documentation规定,你应该使用RealmBaseAdapterrealm-android-adapters结果。

+0

RealmBaseAdapter是强制还是我们可以使用任何自定义适配器? – Ghimire

+0

只要您使用'RealmResults '而不是'ArrayList',并且在数据集更改时还正确地管理'RealmChangeListener'调用正确的'adapter.notify *'方法,那么您可以使用任何适配器。如果您不想手动管理'RealmChangeListener',则使用'RealmBaseAdapter'。 – EpicPandaForce

+0

谢谢,这也帮助我。 ,无论如何,我已经用自定义适配器解决了。 – Ghimire

相关问题