Я новичок в библиотеке Volley, я создаю простое приложение для Android, которое берет данные из API, который генерируется в JSON. После отладки только эта конкретная функция fetchAccD
, упомянутая ниже, имеет проблемы с задержкой с Android Volley. Другие функции в рамках этой деятельности и других видов деятельности, которые подразумевают, что JsonObjectRequest
работает отлично.Volley: onResponse в запросе с задержкой JsonObjectRequest
{
"Account": {
"remarks": "NIL"
"uname": "admin"
"pword": null // value not to be shown
"key": 1316451
"name": "msummons sudo"
}
}
Вот мой текущий код
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
uName = getIntent().getStringExtra("username");
// reset session
authidCoDe = 0;
// invoke session
Account account = fetchAccD(uName);
if (account != null) {
authidCoDe = account.getKey();
...
// init user details before loading
private final Account fetchAccD (String userN) {
final Account account = new Account();
requestQueue = null;
requestQueue = Volley.newRequestQueue(this);
String urlConstruct = *json url*;
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlConstruct,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("Account");
JSONObject jsonObject = jsonArray.getJSONObject(0);
account.setUname(jsonObject.optString("uname"));
// account.setPword(jsonObject.optString("pword"));
account.setKey(jsonObject.optInt("key"));
account.setName(jsonObject.optString("name"));
account.setRemarks(jsonObject.optString("remarks"));
requestQueue.stop();
}
catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Fetch failed!", Toast.LENGTH_SHORT).show();
requestQueue.stop();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Fetch failed!", Toast.LENGTH_SHORT).show();
requestQueue.stop();
}
});
requestQueue.add(jsonObjectRequest);
return account;
}
При вызове fetchAccD
, код работает идеально до
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlConstruct,
new Response.Listener<JSONObject>()
Затем он переходит к onCreate
, где он работает по методу fetchAccD
if (account != null) {
authidCoDe = account.getKey();
...
Перед тем, как вернуться к остальной части метода onResponse
в методе fetchAccD
.
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("Account");
...
Я использовал JsonObjectRequest
GET для большинства моих функций для извлечения JSON, эта проблема возникает только для функции fetchAccD
. Благодаря!
Спасибо! Он работает, но это значит, мой метод 'onCreate' может работать только до' fetchAccD (uName); '? Или нет? :) –
Вы можете добавить больше вещей после 'fetchAccD'. Когда я говорю, что ваша активность должна ждать ответа, это не означает, что вы не можете делать другие вещи тем временем. Пожалуйста, отметьте ответ, как принято, если он работает для вас, спасибо! –
Спасибо! Действительно оценил вашу помощь, вот мое одобрение :) –