Метод не вызывается из onCreate - PullRequest
0 голосов
/ 14 мая 2018

Я делаю платное приложение для Android.Итак, я должен показывать объявления или сообщения, сделанные людьми на моей домашней странице, все работает, и я получаю все свои сообщения на почтальоне, но не на своем повторном обзоре.

public class SearchFragment extends Fragment {

    private static final String TAG = "SearchFragment";
    private static final String BASE_URL = "http://35.188.133.114//elasticsearch/posts/post/";
    private static final int NUM_GRID_COLUMNS = 2;
    private static final int GRID_ITEM_MARGIN = 5;

    //widgets
    private ImageView mFilters;
    private EditText mSearchText;
    private FrameLayout mFrameLayout;

    //vars
    private String mElasticSearchPassword;
    private String mPrefCity;
    private String mPrefStateProv;
    //private String mPrefCountry;
    private String mPrefCollege;
    private ArrayList<Post> mPosts;
    private RecyclerView mRecyclerView;
    private PostListAdapter mAdapter;
    private ListView listView;
    private String currentuser;
    private String user;
    private ImageView filter;


    ArrayList<Card> list = new ArrayList<>();

    FloatingActionButton fab;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_search, container, false);
        mFilters = (ImageView) view.findViewById(R.id.ic_search);
        mSearchText = (EditText) view.findViewById(R.id.input_search);
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        mFrameLayout = (FrameLayout) view.findViewById(R.id.container);
        filter = (ImageView) view.findViewById(R.id.filter);

        currentuser = FirebaseAuth.getInstance().getUid();

        filter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               Intent intent = new Intent(getActivity(),FiltersActivity.class);
               startActivity(intent);

            }
        });

        getElasticSearchPassword();

        welcome();

        init();

        return view;
    }

   private void setupPostsList(){

        RecyclerViewMargin itemDecorator = new RecyclerViewMargin(GRID_ITEM_MARGIN, NUM_GRID_COLUMNS);
        mRecyclerView.addItemDecoration(itemDecorator);
        GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), NUM_GRID_COLUMNS);
        mRecyclerView.setLayoutManager(gridLayoutManager);
        mAdapter = new PostListAdapter(getActivity(), mPosts);
        mRecyclerView.setAdapter(mAdapter);

        // CustomListAdapter adapter = new CustomListAdapter(getActivity(), R.layout.card_layout_main, list);
    }

    private void welcome() {

        if (!currentuser.equals("")) {

            mPosts = new ArrayList<Post>();

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

            ElasticSearchAPI searchAPI = retrofit.create(ElasticSearchAPI.class);

            HashMap<String, String> headerMap = new HashMap<String, String>();
            headerMap.put("Authorization", Credentials.basic("user", mElasticSearchPassword));

            //  String searchString = "*";

       /* if(!mSearchText.equals("")){
            searchString = searchString + mSearchText.getText().toString() + "*";
        }*/
               /* if(!mPrefCity.equals("")){
                    searchString = searchString + " city:" + mPrefCity;
                }
                if(!mPrefStateProv.equals("")){
                    searchString = searchString + " state_province:" + mPrefStateProv;
                }*/
       /* if(!mPrefCollege.equals("")){
            searchString = searchString + " college:" + mPrefCollege;
        }*/
                /*if(!currentuser.equals("")){
                    searchString = searchString + " user_id:" + currentuser;
                }*/

            Call<HitsObject> call = searchAPI.search(headerMap, "AND", "*");

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

                    HitsList hitsList = new HitsList();
                    String jsonResponse = "";
                    try {
                        Log.d(TAG, "onResponse: server response: " + response.toString());

                        if (response.isSuccessful()) {
                            hitsList = response.body().getHits();
                        } else {
                            jsonResponse = response.errorBody().string();
                        }

                        Log.d(TAG, "onResponse: hits: " + hitsList);

                        for (int i = 0; i < hitsList.getPostIndex().size(); i++) {
                            Log.d(TAG, "onResponse: data: " + hitsList.getPostIndex().get(i).getPost().toString());
                            mPosts.add(hitsList.getPostIndex().get(i).getPost());
                        }

                        Log.d(TAG, "onResponse: size: " + mPosts.size());
                        //setup the list of posts
                        setupPostsList();

                    } catch (NullPointerException e) {
                        Log.e(TAG, "onResponse: NullPointerException: " + e.getMessage());
                    } catch (IndexOutOfBoundsException e) {
                        Log.e(TAG, "onResponse: IndexOutOfBoundsException: " + e.getMessage());
                    } catch (IOException e) {
                        Log.e(TAG, "onResponse: IOException: " + e.getMessage());
                    }
                }

                @Override
                public void onFailure(Call<HitsObject> call, Throwable t) {
                    Log.e(TAG, "onFailure: " + t.getMessage());
                    Toast.makeText(getActivity(), "search failed", Toast.LENGTH_SHORT).show();
                }
            });
        }

        // return false;
    }


    private void init(){
       mFilters.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mPosts = new ArrayList<Post>();

                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();

                ElasticSearchAPI searchAPI = retrofit.create(ElasticSearchAPI.class);

                HashMap<String, String> headerMap = new HashMap<String, String>();
                headerMap.put("Authorization", Credentials.basic("user", mElasticSearchPassword));

                String searchString = "";

                if(!mSearchText.equals("")){
                    searchString = searchString + mSearchText.getText().toString() + "*";
                }
               /* if(!mPrefCity.equals("")){
                    searchString = searchString + " city:" + mPrefCity;
                }
                if(!mPrefStateProv.equals("")){
                    searchString = searchString + " state_province:" + mPrefStateProv;
                }*/
                if(!mPrefCollege.equals("")){
                    searchString = searchString + " college:" + mPrefCollege;
                }
                /*if(!currentuser.equals("")){
                    searchString = searchString + " user_id:" + currentuser;
                }*/

                Call<HitsObject> call = searchAPI.search(headerMap, "AND", searchString);

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

                        HitsList hitsList = new HitsList();
                        String jsonResponse = "";
                        try{
                            Log.d(TAG, "onResponse: server response: " + response.toString());

                            if(response.isSuccessful()){
                                hitsList = response.body().getHits();
                            }else{
                                jsonResponse = response.errorBody().string();
                            }

                            Log.d(TAG, "onResponse: hits: " + hitsList);

                            for(int i = 0; i < hitsList.getPostIndex().size(); i++){
                                Log.d(TAG, "onResponse: data: " + hitsList.getPostIndex().get(i).getPost().toString());
                                mPosts.add(hitsList.getPostIndex().get(i).getPost());
                            }

                            Log.d(TAG, "onResponse: size: " + mPosts.size());
                            //setup the list of posts
                            setupPostsList();

                        }catch (NullPointerException e){
                            Log.e(TAG, "onResponse: NullPointerException: " + e.getMessage() );
                        }
                        catch (IndexOutOfBoundsException e){
                            Log.e(TAG, "onResponse: IndexOutOfBoundsException: " + e.getMessage() );
                        }
                        catch (IOException e){
                            Log.e(TAG, "onResponse: IOException: " + e.getMessage() );
                        }
                    }

                    @Override
                    public void onFailure(Call<HitsObject> call, Throwable t) {
                        Log.e(TAG, "onFailure: " + t.getMessage() );
                        Toast.makeText(getActivity(), "search failed", Toast.LENGTH_SHORT).show();
                    }
                });
            }

               // return false;

       });
    }

welcome ()Метод не вызывается, так как я не вижу ни одного сообщения, но метод init () работает и показывает все сообщения при нажатии на кнопку поиска.И оба метода используют один и тот же код, единственное отличие моего запроса - не знаю, почему метод welcome () не показывает ни одного сообщения.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Это проблема с Firbase. Убедитесь, что экземпляр firebase настроен и правильно инициализирован в классе вашего приложения. Тогда вы не сможете получить currentUser == "".

Firebase вернет 401/410 код ошибки в случае неверного токена пользователя / аутентификации с неверной информацией пользователя.

0 голосов
/ 14 мая 2018

См. Значение currentuser = FirebaseAuth.getInstance().getUid();
Только если вы аутентифицируете пользователя, это будет иметь значение, отличное от нуля, иначе оно будет пустым или пустым.

0 голосов
/ 14 мая 2018

На самом деле, ваш метод вызывается с onCreate(), но ваше условие (!currentuser.equals("") возвращается false .

...