Неверный тип для объекта Parse - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь написать запрос разбора, который получает все подъемы, связанные с местоположением. Затем я помещаю, затем помещаю каждое восхождение в ряд и помещаю его в представление переработчика под названием местоположения (само представление переработчика находится внутри нижнего листа, но я не думаю, что это имеет значение). Я получаю сообщение об ошибке:

E / libprocessgroup: set_timerslack_ns Ошибка записи: операция не разрешена E / LocationActivity: проблема с получением маршрутов. Com.parse.ParseException: java .lang.IllegalArgumentException: недопустимый тип для ParseObject : class com.example.climb.activities.LocationActivity

 public class LocationActivity extends AppCompatActivity
 {
     public static final String TAG = "LocationActivity";

     private TextView tvLocationName;
     private TextView tvLocationDescription;
     private TextView tvLocationLatLong;
     private String locationId;
     private RecyclerView rvRoutes;
     protected LocationAdapter adapter;
     protected List <Route> allRoutes;

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

         locationId = getIntent().getStringExtra("locationId");

         if (locationId == null)
         {
             finish();
         }

         tvLocationName = findViewById(R.id.tvLocationName);
         tvLocationDescription = findViewById(R.id.tvLocationDescription);
         tvLocationLatLong = findViewById(R.id.tvLocationLatLong);

         ParseQuery query = ParseQuery.getQuery(Location.class);
         query.getInBackground(locationId, new GetCallback<Location>()
         {
              @Override
              public void done(Location location, ParseException e)
             {
                 if (e != null)
                {
                    Log.e(TAG, "Error while querying database for location.");
                    e.printStackTrace();
                    return;
                 }

            tvLocationName.setText(location.getName());
            tvLocationDescription.setText(location.getDescription());
            tvLocationLatLong.setText(location.getLatLong().toString());
        }
    });

    rvRoutes = findViewById(R.id.rvRoutes);
    allRoutes = new ArrayList<>();
    adapter = new LocationAdapter(this, allRoutes);
    rvRoutes.setAdapter(adapter);
    rvRoutes.setLayoutManager(new LinearLayoutManager(this));
    queryRoutes();


}
protected void queryRoutes() {
    ParseQuery<Route> query = ParseQuery.getQuery(Route.class);
    query.include(Route.KEY_LOCATION);
    query.whereEqualTo("location", locationId);
    //query.setLimit(20);
    query.addDescendingOrder(Route.KEY_CREATED_AT);
    query.findInBackground(new FindCallback<Route>() {
        @Override
        public void done(List<Route> routes, ParseException e) {
            if (e != null) {
                Log.e(TAG, "Issue with getting routes", e);
                return;
            }
            for (Route route : routes) {
                Log.i("Route", "Name: " + route.getName());
            }
            adapter.clear();
            allRoutes.addAll(routes);
            adapter.notifyDataSetChanged();
        }
    });
}

}

Модель маршрута

 @ParseClassName("Route")
 public class Route extends ParseObject
 {
public static final String KEY_OBJECT_ID = "objectId";
public static final String KEY_NAME = "name";
public static final String KEY_DESCRIPTION = "description";
public static final String KEY_LOCATION = "location";
public static final String KEY_DIFFICULTY = "difficulty";
public static final String KEY_METHOD = "method";
public static final String KEY_THUMBNAIL = "thumbnail";


public String getId() { return getString(KEY_OBJECT_ID); }
public void setId(String objectId) { put(KEY_OBJECT_ID, objectId); }

public String getName() { return getString(KEY_NAME); }
public void setName(String name) { put(KEY_NAME, name); }

public String getDescription() { return getString(KEY_DESCRIPTION); }
public void setDescription(String description) { put(KEY_DESCRIPTION, description); }

public ParseObject getLocation() { return getParseObject(KEY_LOCATION); }
public void setLocation(ParseObject location) { put(KEY_LOCATION, location); }

public String getDifficulty() { return getString(KEY_DIFFICULTY); }
public void setDifficulty(String difficulty) { put(KEY_DIFFICULTY, difficulty); }

public String getMethod() { return getString(KEY_METHOD); }
public void setMethod(String method) { put(KEY_METHOD, method); }

public ParseFile getThumbnail() { return getParseFile(KEY_THUMBNAIL); }
public void setThumbnail(ParseFile thumbnail) { put(KEY_THUMBNAIL, thumbnail); }


protected void queryPhotos() {
    ParseQuery<Photo> query = ParseQuery.getQuery("Photos");
    query.include(Photo.KEY_ASSOC_CLASS_ID);
    query.whereEqualTo(Route.KEY_OBJECT_ID, this);
    //query.setLimit(20);
    query.addDescendingOrder(Photo.KEY_CREATED_AT);
    query.findInBackground(new FindCallback<Photo>() {
        @Override
        public void done(List<Photo> photos, ParseException e) {
            if (e != null) {
                Log.e("Route", "Issue with getting photos", e);
                return;
            }
            for (Photo photo : photos) {
                Log.i("Route", "Post: " + photo.getImage());
            }
            //allPhotos.addAll(photos);
            //adapter.notifyDataSetChanged();
        }
    });
}

}

Модель местоположения

@ParseClassName("Location")
 public class Location extends ParseObject
{
public static final String KEY_OBJECT_ID = "objectId";
public static final String KEY_NAME = "name";
public static final String KEY_DESCRIPTION = "description";
public static final String KEY_LAT_LONG = "latLong";


public String getId() { return getString(KEY_OBJECT_ID); }
public void setId(String objectId) { put(KEY_OBJECT_ID, objectId); }

public String getName() { return getString(KEY_NAME); }
public void setName(String name) { put(KEY_NAME, name); }

public String getDescription() { return getString(KEY_DESCRIPTION); }
public void setDescription(String description) { put(KEY_DESCRIPTION, description); }

public ParseGeoPoint getLatLong() { return getParseGeoPoint(KEY_LAT_LONG); }
public void setLatLong(ParseGeoPoint latLong) { put(KEY_LAT_LONG, latLong); }
 }

Адаптер местоположения (переводит маршруты в представление переработчика:

 public class LocationAdapter extends RecyclerView.Adapter<LocationAdapter.ViewHolder> {

private Context context;
private List<Route> routes;

public LocationAdapter(Context context, List<Route> routes) {
    this.context = context;
    this.routes= routes;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_climb, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Route route = routes.get(position);
    holder.bind(route);

}

@Override
public int getItemCount() {
    return routes.size();
}

public void clear() {
    routes.clear();
    notifyDataSetChanged();
}

// Add a list of items -- change to type used
public void addAll(List<Route> list) {
    routes.addAll(list);
    notifyDataSetChanged();
}

class ViewHolder extends RecyclerView.ViewHolder {
    private TextView tvClimbName;
    private TextView tvClimbDescription;
    private ImageView ivClimbThumbnail;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        tvClimbName = itemView.findViewById(R.id.tvClimbName);
        tvClimbDescription = itemView.findViewById(R.id.tvClimbDescription);
        ivClimbThumbnail = itemView.findViewById(R.id.ivClimbThumbnail);

    }

    public void bind(Route route) {
        // Bind the post data to the view element
        tvClimbName.setText(route.getName());
        tvClimbDescription.setText(route.getDescription());
        ParseFile image = route.getThumbnail();
        if (image != null) {
            Glide.with(context).load(image.getUrl()).into(ivClimbThumbnail);
        }
    }
}


}
...