我无法传递 jsonParse 方法变量。我尝试将它们保存在“ArrayList”中,但数组仍然为空。使用另一种方法,例如。 “测试”,它有效。 为什么?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = findViewById(R.id.griglia);
mQueue = Volley.newRequestQueue(this);
txt = findViewById(R.id.titolo);
movieList= new ArrayList<Movie>();
// 我调用方法 jsonParse 来填充我的 ArrayList
jsonParse();
if(movieList.isEmpty()){
txt.setText("vuoto");
}
else{
txt.setText("pieno");
}
}
//我的这段代码有问题。他工作了,但没有填充ArrayList
public void jsonParse(){
String url ="https://api.myjson.com/bins/tn67c";
JsonObjectRequest request= new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray= response.getJSONArray("movie");
for(int i=0; i<jsonArray.length(); i++){
JSONObject emplyee = jsonArray.getJSONObject(i);
String titolo = emplyee.getString("titolo");
String url = emplyee.getString("url");
String icona= emplyee.getString("icona");
Movie movie= new Movie();
movie.setTitolo(titolo);
movie.setVideoFilePath(url);
movieList.add(i, movie);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);
}
// 我信任示例方法“prova”,现在就可以使用它。为什么?
public void prova(){
int i=0;
for(i=0; i<2; i++){
String test= "ciao " + i;
Movie movie= new Movie();
movie.setTitolo(test);
movieList.add(movie);
}
}
最佳答案
您正在调用请求后初始化movieList
,请先调用,尝试在onCreate
之前初始化您的列表
ArrayList<Movie> movieList = new ArrayList<Movie>();
然后把这个
if(movieList.isEmpty()){
txt.setText("vuoto");
} else{
txt.setText("pieno");
}
在列表中添加完项目后立即
编辑:
package com.example.zvideo2;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
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;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
String url ="https://api.myjson.com/bins/tn67c";
private RequestQueue mQueue;
ArrayList<Movie> movieList= new ArrayList<Movie>();
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mQueue = Volley.newRequestQueue(this);
txt = findViewById(R.id.titolo);
jsonParse();
// prova();
}
public void jsonParse(){
String url ="https://api.myjson.com/bins/tn67c";
JsonObjectRequest request= new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray= response.getJSONArray("movie");
for(int i=0; i<jsonArray.length(); i++){
JSONObject emplyee = jsonArray.getJSONObject(i);
String titolo = emplyee.getString("titolo");
String url = emplyee.getString("url");
String icona= emplyee.getString("icona");
Movie movie= new Movie();
movie.setTitolo(titolo);
movie.setVideoFilePath(url);
movieList.add(i, movie);
}
Toast.makeText(getActivity(), "item add successfully", Toast.LENGTH_LONG).show();
if(movieList.isEmpty()){
txt.setText("vuoto");
}else{
txt.setText("pieno");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);
mQueue.start(request);
}
public void prova(){
int i=0;
for(i=0; i<2; i++){
String test= "ciao " + i;
Movie movie= new Movie();
movie.setTitolo(test);
movieList.add(movie);
}
}
}
关于java - 如何修复此代码?将字符串从方法传递到 MainActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56348737/