java - 如何修复此代码?将字符串从方法传递到 MainActivity

标签 java android json

我无法传递 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/

相关文章:

java - 用笑脸围绕一根绳子

android - onActivityResult 未在 fragment android 中调用

java - HttpPost 响应不返回 json 对象

javascript - 使用 localStorage 保存 ajax 响应,然后用作对象

arrays - Swift - json 嵌套数组不返回值

java - 单个图像按钮用作开始-停止-开始

java - 启动实例 : VPC security groups may not be used for a non-VPC launch

java - 需要在 Tomcat 中将两个应用程序映射到相同的基本 URL 下

Android Web 查看下载文件 "Can' t 打开文件”消息

android - 如何将数据从 Android 设备传输到 C++ PC 程序?