Распарсить два json в одном mainactivity

Я новичок в java и android studio. Нужна помощь! Помогите пожалуйста распарсить два json в одном mainactivity! id для второго url будет браться из данных распарсенных по первому url.

MainActivity.java

import android.content.Intent;

import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements ExampleAdapter.OnItemClickListener {
    public static final String EXTRA_URL = "imageUrl";
    public static final String EXTRA_CREATOR = "creatorName";
    public static final String EXTRA_LIKES = "likeCount";

    private RecyclerView mRecyclerView;
    private ExampleAdapter mExampleAdapter;
    private ArrayList<ExampleItem> mExampleList;
    private RequestQueue mRequestQueue;
    EditText editText;
    Button btn_poisk;

    String poisk;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText=findViewById(R.id.edit_text);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        btn_poisk=findViewById(R.id.btn_poisk);


        mRecyclerView = findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        mExampleList = new ArrayList<>();

        mRequestQueue = Volley.newRequestQueue(this);
        btn_poisk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mExampleList.clear();
                if (editText.length()<3)
                {
                    Toast.makeText(getApplicationContext(),"Минимально количество символов 3",Toast.LENGTH_SHORT).show();
                } else
                {poisk = new String(editText.getText().toString()); }

                editText.setText("");
                parseJSON();
            }
        });
    }

    private void parseJSON() {


        String url = "https://mixs.shop.ru/b.php?action=search&query="+poisk;
String url2 ="https://mixs.shop.ru/b.php?action=info&id="+id;


        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("SEARCH");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject hit = jsonArray.getJSONObject(i);

                                String KTl = hit.getString("ktl");
                                String creatorName = hit.getString("spr_3_name");
                                String imageUrl = hit.getString("tb_image_id") ;
                                int likeCount = hit.getInt("tb_price_value");

                                mExampleList.add(new ExampleItem(imageUrl, KTl, creatorName, likeCount));
                            }

                            mExampleAdapter = new ExampleAdapter(MainActivity.this, mExampleList);
                            mRecyclerView.setAdapter(mExampleAdapter);
                            mExampleAdapter.setOnItemClickListener(MainActivity.this);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mRequestQueue.add(request);
    }

  

Спасибо большое!


Ответы (1 шт):

Автор решения: Dmitry Avdoshin

(я не могу писать комментари поэтому пишу здесь) мм, ну так у тебя же методы не асинхронные судя по коду, мб попробуешь взывать их(метод по первому парсу json . а потом второй) последовательно при этом возвращая какие то данные из метода parseJson, на основе которых будет работать второй метод? Ну или передать в parseJson callback и вызывать его в случае удачного результата. A вообще посмотри в сторону retrofit, с помощью которого ты можешь делать запросы в сеть , а также использовать фабрики популярных android сериализаторов Moshi Gson

→ Ссылка