Как искать пользователей из базы данных, используя модернизацию в Android studio? - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно реализовать функцию приглашения в моем приложении Android, но у меня нет предварительных знаний для этого. Идея состоит в том, что у меня есть Edittext (или, может быть, другое поле), где пользователь может искать других пользователей, которые зарегистрированы, и, щелкая по ним, они появляются под полем поиска в виде списка. И, нажав на кнопку приглашения, каждый в списке получает уведомление / приглашение. Как это можно сделать с помощью модернизации? Это должно быть примерно так, как для каждого написанного символа отправляется запрос API и отображаются предложения. Я использую Laravel и Android(java). У меня не так много кода, написанного здесь, потому что я не знаю, где и как начать. Вот запрос:

 @GET("users")
 Call<List<User>> getUsers(@Header("Authorization") String token);

Вот метод getUsers до сих пор в упражнении:

  private void getUsers(){
    Log.d(TAG, "onResponse: loadData called");
    ApiService service = RetrofitBuilder.getRetrofitInstance().create(ApiService.class);
    Call<List<User>> call = service.getUsers("Bearer "+token);
    call.enqueue(new Callback<List<User>>() {
        @Override
        public void onResponse(@NonNull Call<List<User>> call, @NonNull Response<List<User>> response) {
            try {
                if (response.isSuccessful()){
                    Log.d(TAG, "onResponse: successful loadData called");

                    adapter = new UserAdapter(mContext, arrayList);
                    listView.setAdapter(adapter);
                }
                else{
                    Log.d(TAG, "onResponse: " + response.body());
                }
            }
            catch (Exception e){
                Toast.makeText(TeamAdminActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onFailure(@NonNull Call<List<User>> call, @NonNull Throwable t) {
            Log.d("Response", "onFailure: " + t.toString());
        }
    });
}

Также фрагмент моего xml файла:

 <TextView
            android:id="@+id/invite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/activity_vertical_margin"
            android:layout_marginTop="36dp"
            android:layout_below="@id/team_title"
            android:textSize="24sp"
            android:textColor="@color/colorPrimary"
            android:text="@string/invite_members" />

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/search"
            style="@style/TextInputLayoutAppearance"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/invite"
            android:layout_marginTop="10dp"
            android:layout_marginStart="18dp"
            android:layout_marginEnd="18dp"
            android:hint="@string/search"
            android:textSize="23sp"
            app:boxStrokeColor="@color/colorPrimaryDark">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/search_et"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/spinner"
                android:hint="@string/event_name"
                android:textSize="18sp" />
        </com.google.android.material.textfield.TextInputLayout>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/invite"
            android:layout_toEndOf="@+id/search"/>

        <TextView
            android:id="@+id/invited"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/activity_vertical_margin"
            android:layout_marginTop="36dp"
            android:layout_below="@id/search"
            android:textSize="24sp"
            android:textColor="@color/colorPrimary"
            android:text="@string/invited" />

        <androidx.core.widget.NestedScrollView
            android:id="@+id/scroll_view"
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_below="@id/invited">

            <ListView
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </androidx.core.widget.NestedScrollView>

        <Button
            android:id="@+id/create_team_btn"
            android:layout_width="260dp"
            android:layout_height="60dp"
            android:layout_below="@+id/scroll_view"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="18dp"
            android:layout_marginBottom="14dp"
            android:background="@drawable/my_color_button"
            android:text="@string/invite"
            android:textColor="@color/myWhite" />

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете сделать это, внедрив Observer в свою деятельность или фрагмент, где вы хотите добавить функцию приглашения.

Создать класс, который расширяет Observable:

public class FilterManager extends Observable {
    private String query;

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
        setChanged();
        notifyObservers();
    }

}

Предположим, вы есть фрагмент для приглашения:

public class InvitationFragment extends Fragment implements Observer
{
    //your other code here

    @Override
    public void update(Observable observable, Object o) {
        if(observable instanceof FilterManager){

           //retrieve the search value          
            String result = ((FilterManager)observable).getQuery();

            if(!result.isEmpty())
                getUsers(result); //call api getUsrs method here
            else {
                userList = null;
                setRecyclerView(getContext());
            }          
        }
    }

    private void getUsers(String query){
       //your code here
    }
}

Измените свой остальной вызов API:

@GET("users/{query}")
Call<List<User>> getUsers(@Header("Authorization") String token,@Path("query") String query);
...