Я пытаюсь вызывать функции в хронологическом порядке, но функции parseJSONTwo()
, кажется, выполняются перед функцией parseJSON()
(обе функции просто извлекают данные JSON из URL)
package com.example.rechev;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
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;
public class pratim extends AppCompatActivity {
RequestQueue queue;
TextView degem;
String model;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pratim);
degem = findViewById(R.id.pratim);
queue = Volley.newRequestQueue(this);
parseJSON();
parseJSONTwo();
}
public void parseJSON() {
Intent intent = getIntent();
int number = intent.getIntExtra("inumber", 1234567);
String url = "http://apiurl.com" + number}";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject result = response.getJSONObject("res");
JSONArray jsonArray = result.getJSONArray("rec");
String test = result.getString("total");
if (Integer.parseInt(test) == 1) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject number = jsonArray.getJSONObject(i);
String carMaker = number.getString("toze");
degem.append(String.valueOf("\n maj: " + carMaker));
model = number.getString("degem_nm");
if (carGimur.length() >= 1) {
degem.append(String.valueOf("\n type: " + carGimur));
}
}
} else {
degem.append("invalid");
}
} catch (JSONException e) {
degem.append(e.toString());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
degem.append("Error");
}
});
queue.add(request);
}
public void parseJSONTwo() {
String url = "http://apiurl.com"+model}";
JsonObjectRequest requestt = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject result = response.getJSONObject("res");
JSONArray jsonArray = result.getJSONArray("rec");
String test = result.getString("total");
if (Integer.parseInt(test) == 1) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject number = jsonArray.getJSONObject(i);
String carNefah = number.getString("nefah_manoa");
degem.append(String.valueOf("num: " + carNefah));
}
}
} catch (JSONException e) {
degem.append(e.toString());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
degem.append("Error");
}
});
queue.add(requestt);
}
}
функция parseJSON()
извлекает данные JSON из url
и помещает их в TextView
, а также устанавливает глобальную переменную (модель) в значение, которое parseJSONTWO()
использует в своем URL, чтобы он мог извлекать данные на основе первого parseJSON()
function.
Проблема в том, что parseJSONTwo()
вызывается первым по какой-то причине, поэтому он не может использовать информацию, которую извлекает parseJSON()
.
Обновленный код:
package com.example.rechev;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
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;
public class pratim extends AppCompatActivity {
RequestQueue queue;
TextView degem;
String model;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pratim);
degem = findViewById(R.id.pratim);
queue = Volley.newRequestQueue(this);
parseJSON();
}
public void parseJSON() {
Intent intent = getIntent();
int number = intent.getIntExtra("inumber", 1234567);
String url = "http://apiurl.com" + number}";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject result = response.getJSONObject("res");
JSONArray jsonArray = result.getJSONArray("rec");
String test = result.getString("total");
if (Integer.parseInt(test) == 1) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject number = jsonArray.getJSONObject(i);
String carMaker = number.getString("toze");
degem.append(String.valueOf("\n maj: " + carMaker));
model = number.getString("degem_nm");
if (carGimur.length() >= 1) {
degem.append(String.valueOf("\n type: " + carGimur));
}
}
} else {
degem.append("invalid");
}
if(model.length() >= 1){
parseJSONTwo();
}
} catch (JSONException e) {
degem.append(e.toString());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
degem.append("Error");
}
});
queue.add(request);
}
public void parseJSONTwo() {
String url = "http://apiurl.com"+model}";
JsonObjectRequest requestt = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject result = response.getJSONObject("res");
JSONArray jsonArray = result.getJSONArray("rec");
String test = result.getString("total");
if (Integer.parseInt(test) == 1) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject number = jsonArray.getJSONObject(i);
String carNefah = number.getString("nefah_manoa");
degem.append(String.valueOf("num: " + carNefah));
}
}
} catch (JSONException e) {
degem.append(e.toString());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
degem.append("Error");
}
});
queue.add(requestt);
}
}
сейчас parseJSONTwo
получит правильный URL, но не завершит функцию.