Как получить список элементов по относительному URL при модернизации, используя вид рециркулятора? - PullRequest
0 голосов
/ 26 сентября 2019

Пытаюсь получить список служб по относительному URL, т.е. используя аннотацию @Path из веб-службы, которую я создал в Python-flask.Я использую Retrofit2 и Android Studio для достижения этой цели.

Я попытался получить все службы, и он работает отлично.Но когда я пытаюсь получить по относительной, то есть с помощью аннотации @Path, я получаю исключение;java.lang.NullPointerException: попытка вызвать метод интерфейса int java.util.List.size () для нулевой ссылки на объект

Это класс адаптера:

private Context mCtx;
private List<Service> serviceList;

public ServicesAdapter(Context mCtx, List<Service> serviceList) {
    this.mCtx = mCtx;
    this.serviceList = serviceList;
}

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

@Override
public void onBindViewHolder(@NonNull ServicesViewHolder holder, int position) {

    Service service = serviceList.get(position);

    holder.tvRPortfolio.setText(service.getPortfolio());
    holder.tvROccupation.setText(service.getOccupation());
    holder.tvRBusinessName.setText(service.getBusiness_name());
    holder.tvRDescription.setText(service.getDescription());
    holder.tvRLocation.setText(service.getLocation());
    holder.tvRWorking_hours.setText(service.getWorking_hours());
    holder.tvRPhone.setText(service.getPhone());
    holder.tvRCost.setText(service.getCost());

}

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

class ServicesViewHolder extends RecyclerView.ViewHolder{

    TextView tvRBusinessName, tvRDescription, tvRPortfolio, tvROccupation, tvRLocation, tvRWorking_hours, tvRPhone, tvRCost;

    public ServicesViewHolder(@NonNull View itemView) {
        super(itemView);

        tvRPortfolio = itemView.findViewById(R.id.tvRPortfolio);
        tvROccupation = itemView.findViewById(R.id.tvROccupation);
        tvRBusinessName = itemView.findViewById(R.id.tvRBusinessName);
        tvRDescription = itemView.findViewById(R.id.tvRDescription);
        tvRLocation = itemView.findViewById(R.id.tvRLocation);
        tvRWorking_hours = itemView.findViewById(R.id.tvRWorking_hours);
        tvRPhone = itemView.findViewById(R.id.tvRPhone);
        tvRCost = itemView.findViewById(R.id.tvRCost);

    }
}

}

Это класс ViewServiceFragment:

Button btnPay;
private RecyclerView recyclerView;
private ServicesAdapter adapter;
private List<Service> serviceList;

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

    View searchView = inflater.inflate(R.layout.fragment_view_services, container, false);
    setHasOptionsMenu(true);

    btnPay = searchView.findViewById(R.id.btnPay);
    btnPay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(getActivity(), Login.class));
        }
    });

    return searchView;
}


@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);



    recyclerView = view.findViewById(R.id.rvGetServices);

    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


    ServiceInterface serviceInterface = ServiceGenerator.createService(ServiceInterface.class);

    Call<ServiceResponse> call = serviceInterface.getServices("Music");

    call.enqueue(new Callback<ServiceResponse>() {
        @Override
        public void onResponse(Call<ServiceResponse> call, Response<ServiceResponse> response) {

            serviceList = new ArrayList<>();

            serviceList = response.body().getServices();

            adapter = new ServicesAdapter(getActivity(), serviceList);

            recyclerView.setAdapter(adapter);

        }

        @Override
        public void onFailure(Call<ServiceResponse> call, Throwable t) {

        }
    });
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.option_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.add_service:
            startActivity(new Intent(getActivity(), AddServiceFragment.class));
            return true;
        case R.id.view_services:
            startActivity(new Intent(getActivity(), ViewServicesFragment.class));
            return true;
        case R.id.register:
            startActivity(new Intent(getActivity(), Register.class));
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }

}

}

Это интерфейс:

@GET("api/v1/add_services/{occupation}")
Call<ServiceResponse> getServices(@Path("occupation") String occupation);

}

НаконецЭто модели

private String message;
private List<Service> services;
private String status;

public ServiceResponse(String message, List<Service> services, String status) {
    this.message = message;
    this.services = services;
    this.status = status;
}

public String getMessage() {
    return message;
}

public List<Service> getServices() {
    return services;
}

public String getStatus() {
    return status;
}

}

Вторая модель:

private Integer service_id;

private String name;

private String business_name;

private String portfolio;

private String occupation;

private String description;

private String phone;

private String location;

private String working_hours;

private String cost;

public Service(String name, String business_name, String portfolio, String occupation, String description, String phone, String location, String working_hours, String cost) {
    this.name = name;
    this.business_name = business_name;
    this.portfolio = portfolio;
    this.occupation = occupation;
    this.description = description;
    this.phone = phone;
    this.location = location;
    this.working_hours = working_hours;
    this.cost = cost;
}

public Integer getService_id() {
    return service_id;
}

public String getPortfolio() {
    return portfolio;
}

public String getOccupation() {
    return occupation;
}

public String getPhone() {
    return phone;
}

public String getLocation() {
    return location;
}

public String getWorking_hours() {
    return working_hours;
}

public String getCost() {
    return cost;
}

public String getName() {
    return name;
}

public String getBusiness_name() {
    return business_name;
}

public String getDescription() {
    return description;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...