Проблема с несколькими запросами залпа - PullRequest
1 голос
/ 09 июня 2019

Всякий раз, когда я хочу выполнить запрос залпа на основе пользовательского ввода, я должен нажать кнопку дважды, чтобы вместо нажатия кнопки только один раз, чтобы получить запрошенный ответ.

Я использовал функцию wait (), но все еще имеюта же проблема и приложение повреждено, хотя я ожидал, что приложение будет работать нормально.

Это то, чего я достиг до сих пор:

   String URL="https://apifootball.com/api/?action=get_countries&APIkey=b4c74bf2fcf3937f783b752649018a42a3b1bde9d5d7c03ff36f61fc06c00c77";
        RequestQueue rq= Volley.newRequestQueue(this);

        JsonArrayRequest objreq= new JsonArrayRequest(

                Request.Method.GET,
                URL,
                null,
                new Response.Listener<JSONArray>()
                {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {

                            Log.e("result:",response.get(0).toString());
                            JSONObject obj;
                            for (int count = 0; count < response.length(); count++) {
                                obj = response.getJSONObject(count);
                                String name = obj.getString("country_name");
                                Log.e("Country:",name);
                                send(name,true);
                                //  Team t=new Team(2,"mki");
                                //x.insertTeam(t);
                                //so on
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener(){

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("rest response",error.toString());
                    }
                }
        );
        rq.add(objreq);

        btn_send_message.setOnClickListener(new View.OnClickListener() {
            ChatModel model;
public void onClick(View v) {
                String text = editText.getText().toString();
else if(text.contains("result"))
                {
                    ChatModel model = new ChatModel(text, true); // user send message
                    list_chat.add(model);

                    String result="";
                    String head2Head;
                    String input[] = text.split(" ");
                    String[] arr=null ;
                    DBAdapter dbAdapter=new DBAdapter(x);
                    try{
                        result=dbAdapter.getResultfromDB("Bristol City","Reading");

                    }catch (Exception e)
                    {
                        result="error";
                    }

                    if(result.equals("error")==true) {

                        APIAdapter ap = new APIAdapter();
                        head2Head = ap.getResult("Bristol City", "Reading", "kjkn", getApplicationContext());
                        finres = head2Head;
                        Log.e("headto",head2Head);
                        arr = head2Head.split("\n");
                        }
                    model = new ChatModel("First team:"+arr[0]+"\nSecond team:"+arr[1]+"\n"+"Date:"+arr[2], false);
                    list_chat.add(model);
                }
}

1 Ответ

0 голосов
/ 09 июня 2019

Теперь я понимаю ваш вопрос.То, что происходит, это то, что данные загружаются не сразу.Поэтому используйте что-то вроде индикатора выполнения и измените его видимость внутри Response.Listener и Response.ErrorListener.Для правильной работы переместите строку rq.add(objreq); внутри onClickListener и перед этой строкой измените видимость индикатора выполнения на видимую.

Пример

Layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/mainParentRel"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:background="@drawable/grad_bg_2"
        android:isScrollContainer="true"
        android:scrollbars="vertical">

        <ScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:fillViewport="true"
            android:scrollbars="vertical">

         <!-- You can use any thing here
              Put all your previous buttons edittext etc here.
              You can replace the scrollview with any layout
              Or You can completely remove the scrollview and 
              directly put your views here. -->

        </ScrollView>

        <!-- This is the progress bar layout. Always remember to set its visibility to GONE.-->

        <RelativeLayout
            android:id="@+id/progressRelLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:visibility="gone">
            <ImageView
                android:id="@+id/company_logo_progress"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:layout_centerHorizontal="true"
                android:adjustViewBounds="true"
                android:contentDescription="@string/company_logo"
                android:scaleType="fitCenter"
                android:src="@drawable/company_logo" />
            <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/company_logo_progress"
                android:layout_marginTop="5dp"
                android:layout_centerHorizontal="true"
                android:theme="@style/WhiteAccent"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/progressBar"
                android:text="Loading..."
                android:textColor="@color/white"
                android:textSize="17dp"
                android:layout_centerHorizontal="true"/>
        </RelativeLayout>

    </RelativeLayout>

Example.java

RelativeLayout progressRL; 
//Inside onCreate()
progressRL= findViewById(R.id.progressRelLayout);

//Do rest of your stuff
   String URL="https://apifootball.com/api/?action=get_countries&APIkey=b4c74bf2fcf3937f783b752649018a42a3b1bde9d5d7c03ff36f61fc06c00c77";
        RequestQueue rq= Volley.newRequestQueue(this);

        JsonArrayRequest objreq= new JsonArrayRequest(

                Request.Method.GET,
                URL,
                null,
                new Response.Listener<JSONArray>()
                {
                    @Override
                    public void onResponse(JSONArray response) {
progressRL.setVisibility(View.GONE);
                        try {

                            Log.e("result:",response.get(0).toString());
                            JSONObject obj;
                            for (int count = 0; count < response.length(); count++) {
                                obj = response.getJSONObject(count);
                                String name = obj.getString("country_name");
                                Log.e("Country:",name);
                                send(name,true);
                                //  Team t=new Team(2,"mki");
                                //x.insertTeam(t);
                                //so on
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener(){

                    @Override
                    public void onErrorResponse(VolleyError error) {
progressRL.setVisibility(View.GONE);

                        Log.e("rest response",error.toString());
                    }
                }
        );


        btn_send_message.setOnClickListener(new View.OnClickListener() {
            ChatModel model;
public void onClick(View v) {

rq.add(objreq);
progressRL.setVisibility(View.VISIBLE);



                String text = editText.getText().toString();
else if(text.contains("result"))
                {
                    ChatModel model = new ChatModel(text, true); // user send message
                    list_chat.add(model);

                    String result="";
                    String head2Head;
                    String input[] = text.split(" ");
                    String[] arr=null ;
                    DBAdapter dbAdapter=new DBAdapter(x);
                    try{
                        result=dbAdapter.getResultfromDB("Bristol City","Reading");

                    }catch (Exception e)
                    {
                        result="error";
                    }

                    if(result.equals("error")==true) {

                        APIAdapter ap = new APIAdapter();
                        head2Head = ap.getResult("Bristol City", "Reading", "kjkn", getApplicationContext());
                        finres = head2Head;
                        Log.e("headto",head2Head);
                        arr = head2Head.split("\n");
                        }
                    model = new ChatModel("First team:"+arr[0]+"\nSecond team:"+arr[1]+"\n"+"Date:"+arr[2], false);
                    list_chat.add(model);
                }
}


После этого это может привести к ошибкам.Просто переместите вещи, которые будут меняться после загрузки данных внутри Response.Listener.

...