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