Какое отношение между searchView и 'float android .graphics.RectF.left' для нулевого объекта - PullRequest
0 голосов
/ 15 апреля 2020

это исключение nullpointerexception произошло, когда я выполняю поиск по запросу searchView, здесь указан код, но я не вижу ничего подходящего

private Context context = this;
private Toolbar toolbar;
RectF f;
private TextView title;
private ActionBar actionBar;
private RecyclerView searchRecyclerView;
private SearchView searchView;
private ImageView closeIcon;
private MovieAdapter adapter;
private MovieSearchPresenter presenter;
private int visibleItems, totalItem, currentItemPosition, totalPagesCount;
private boolean isLoading = false;
private RotateLoading loading;
private SwipeRefreshLayout refreshLayout;
private Handler handler;
private TextView searchText;
private LinearLayout noDataContainer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);
    toolbar = findViewById(R.id.toolbar);
    title = toolbar.findViewById(R.id.title);
    searchView = toolbar.findViewById(R.id.search_view);
    searchRecyclerView = findViewById(R.id.search_recycler_view);
    loading = findViewById(R.id.rotate_loading);
    refreshLayout = findViewById(R.id.swipe_refresh_layout);
    noDataContainer = findViewById(R.id.no_data_container);
    title.setText("MovieDB");
    setSupportActionBar(toolbar);
    actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
    toolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.blue_gray_100), PorterDuff.Mode.SRC_ATOP);
    searchView.setIconified(false);
    closeIcon = searchView.findViewById(androidx.appcompat.R.id.search_close_btn);
    searchText = searchView.findViewById(androidx.appcompat.R.id.search_src_text);
    searchText.setTextColor(getResources().getColor(R.color.blue_gray_100));
    closeIcon.setColorFilter(getResources().getColor(R.color.blue_gray_100));
    presenter = new MovieSearchPresenter(this);
    handler = new Handler();
    searchRecyclerView.setLayoutManager(new GridLayoutManager(context, 2));
    adapter = new MovieAdapter(context);
    searchRecyclerView.setAdapter(adapter);
    totalPagesCount = presenter.getTotalPage();
    refreshLayout.setOnRefreshListener(() -> {
        if (adapter.getList() != null) {
            refreshLayout.setRefreshing(true);
            adapter.getList().clear();
            searchRecyclerView.setVisibility(View.GONE);
            handler.postDelayed(() -> {
                presenter.getMovieSearch(1, "");
                searchView.setQuery("", false);
                refreshLayout.setRefreshing(false);
            }, 1500);
        } else {
            refreshLayout.setRefreshing(true);
            searchRecyclerView.setVisibility(View.GONE);
            handler.postDelayed(() -> {
                searchView.setQuery("", false);
                refreshLayout.setRefreshing(false);
            }, 1500);
        }
    });
    searchRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            GridLayoutManager manager = (GridLayoutManager) recyclerView.getLayoutManager();
            visibleItems = manager.getChildCount();
            totalItem = manager.getItemCount();
            currentItemPosition = manager.findFirstVisibleItemPosition();
            if ((visibleItems + currentItemPosition) >= totalItem) {
                if (!isLoading) {
                    isLoading = true;
                    loading.setVisibility(View.VISIBLE);
                    loading.start();
                    handler.postDelayed(() -> presenter.increasePages(), 2000);
                }
            } else {
                isLoading = false;
            }
        }
    });
    searchView.setOnSearchClickListener(v -> {
        title.setVisibility(View.GONE);
        searchView.requestFocus();
    });
    searchView.setOnCloseListener(() -> {
        title.setVisibility(View.VISIBLE);
        searchView.clearFocus();
        return false;
    });
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            if (adapter.getList() != null && adapter.getList().size() > 0) {
                adapter.getList().clear();
            }
            presenter.getMovieSearch(1, newText);
            return true;
        }
    });
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        onBackPressed();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void MovieSearchList(List<Movies> movies) {
    if (movies.size() <= 0) {
        searchRecyclerView.setVisibility(View.GONE);
        loading.setVisibility(View.GONE);
        loading.stop();
        noDataContainer.setVisibility(View.VISIBLE);
    } else {
        noDataContainer.setVisibility(View.GONE);
        loading.setVisibility(View.GONE);
        loading.stop();
        searchRecyclerView.setVisibility(View.VISIBLE);
        adapter.setList(movies);
        adapter.notifyDataSetChanged();
    }
}

@Override
public void showLoading() {

}

@Override
public void removeLoading() {

}

@Override
public void internetConnectionError(int internetConnectionIcon) {
}

здесь ведущий запрос

private SearchContract contract;
private int pages = 1;
private String query = "";
private ArrayList<Movies> movieList = new ArrayList<>();
private int totalPage;

public MovieSearchPresenter(SearchContract contract) {
    this.contract = contract;
}

public void getMovieSearch(int pages, String query) {
    this.query = query;
    String url = EndPoints.SEARCH_BASE_URL + EndPoints.API_KEY + EndPoints.PAGES + String.valueOf(pages) + EndPoints.QUERY + query;
    Log.e("search_url", url);
    StringRequest request = new StringRequest(Request.Method.GET, url, response -> {
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();
        MovieResponse movieResponse = gson.fromJson(response, MovieResponse.class);
        totalPage = movieResponse.getPage();
        movieList.addAll(movieResponse.getMovieList());
        contract.MovieSearchList(movieList);
    }, error -> contract.internetConnectionError(R.drawable.baseline_wifi_off_black_36));
    RequestQueue queue = Volley.newRequestQueue(MovieApp.getInstance().getApplicationContext());
    queue.add(request);
}

public int getTotalPage() {
    return totalPage;
}

public void increasePages() {
    pages++;
    getMovieSearch(pages, query);
}

и xml расположение кода

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.MovieDB.ui.activity.Search">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/blue_gray_900">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:minHeight="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/title"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="3"
                    android:gravity="center_vertical"
                    android:textColor="@color/blue_gray_100"
                    android:textSize="20sp"
                    android:visibility="gone" />

                <androidx.appcompat.widget.SearchView
                    android:id="@+id/search_view"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="0.5"
                    android:gravity="center_vertical"
                    android:visibility="visible"
                    app:queryHint="movie name..."
                    app:searchHintIcon="@drawable/ic_search"
                    app:searchIcon="@drawable/ic_search" />

            </LinearLayout>
        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

    <LinearLayout
        android:id="@+id/no_data_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="8dp"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="8dp"
        android:visibility="gone">

        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_marginBottom="12dp"
            android:src="@drawable/desert" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="No Movies Found"
            android:textColor="@color/black"
            android:textSize="26sp"
            android:textStyle="bold" />
    </LinearLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
            android:id="@+id/swipe_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/search_recycler_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

        <com.victor.loading.rotate.RotateLoading
            android:id="@+id/rotate_loading"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:loading_color="@color/blue_gray_200"
            app:loading_width="5dp" />

     </androidx.constraintlayout.widget.ConstraintLayout>

    </LinearLayout>

и вот сообщение об ошибке

    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.MovieDB, PID: 27778
    java.lang.NullPointerException: Attempt to read from field 'float 
    android.graphics.RectF.left' on a null object reference
        at android.view.RecordingCanvas.drawArc(RecordingCanvas.java:67)
        at com.victor.loading.rotate.RotateLoading.onDraw(RotateLoading.java:111)
        at android.view.View.draw(View.java:20234)
        at android.view.View.updateDisplayListIfDirty(View.java:19109)
        at android.view.View.draw(View.java:19962)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at 
 androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:2023)
        at android.view.View.updateDisplayListIfDirty(View.java:19100)
        at android.view.View.draw(View.java:19962)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19100)
        at android.view.View.draw(View.java:19962)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19100)
        at android.view.View.draw(View.java:19962)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19100)
        at android.view.View.draw(View.java:19962)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19100)
        at android.view.View.draw(View.java:19962)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19100)
        at android.view.View.draw(View.java:19962)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.draw(View.java:20237)
        at com.android.internal.policy.DecorView.draw(DecorView.java:784)
        at android.view.View.updateDisplayListIfDirty(View.java:19109)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:686)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:692)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:801)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:3402)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3199)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2558)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1535)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7405)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1044)
        at android.view.Choreographer.doCallbacks(Choreographer.java:839)
        at android.view.Choreographer.doFrame(Choreographer.java:774)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1030)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6864)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

Я даже не знаю, что здесь делает RectF.left, я много искал но ничего полезного я не нашел, поэтому, пожалуйста, любая вещь будет удивительной и спасибо

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