【问题标题】:Volley not loading anything into ArrayList in Android StudioVolley 没有将任何内容加载到 Android Studio 中的 ArrayList 中
【发布时间】:2018-11-11 03:57:51
【问题描述】:

我正在尝试通过btnClick_Normal(View v) 方法将填充getPartidos() 方法的ArrayList 与凌空传递给另一个活动,但是每当我按下任何按钮时使用该方法时,我都会收到错误消息,提示miListaPartidos 为空(@ 987654321@)。

该 URL 在线且工作正常。为什么会发生这种情况,有多少代码是错误的?

这是我的活动

import android.content.Intent;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;

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 com.bumptech.glide.Glide;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class Act1_1 extends AppCompatActivity {

    public String urlPartidos="https://.."; /*hid the url, it's working properly*/

    public ArrayList<Partido> miListaPartidos=new ArrayList<>();


    public Button btns1;
    public Button btns2;
    public Button btns3;
    public Button btns4;
    public Button btns5;
    public Button btns6;
    public Button btns7;
    public Button btns8;
    public Button btnE;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act1_1);

        btns1=findViewById(R.id.btns1);
        btns2=findViewById(R.id.btns2);
        btns3=findViewById(R.id.btns3);
        btns4=findViewById(R.id.btns4);
        btns5=findViewById(R.id.btns5);
        btns6=findViewById(R.id.btns6);
        btns7=findViewById(R.id.btns7);
        btns8=findViewById(R.id.btns8);
        btnE=findViewById(R.id.btnE);    

        getPartidos();  
    }

    public void btnClick_Normal(View v){
        Intent intent=new Intent(getApplicationContext(),Act1_1_1.class);
        int id1=(Integer.parseInt((String)v.getTag()));
        ArrayList<Partido> listaEq=new ArrayList<>();

        for(int i=(((id1-1)*6)); i<=(id1*6)-1;i++ ) {  
            listaEq.add(miListaPartidos.get(i));    
        }
        intent.putExtra("listaEq",  listaEq);
        startActivity(intent);
    }

    public void btnClick_Especial(View v){   
        Intent intent=new Intent(getApplicationContext(),Act1_1_2.class);
        ArrayList<Partido> listaEq=new ArrayList<>();

        for(int i=48; i<=63;i++ ) {    
            listaEq.add(miListaPartidos.get(i));
        }
        intent.putExtra("listaEq2", listaEq);
        startActivity(intent);
    }

   public void getPartidos(){    
        RequestQueue requestQueue= Volley.newRequestQueue(this);
        JsonObjectRequest jSonObjectRequest=new JsonObjectRequest(Request.Method.GET,urlPartidos, null, new Response.Listener<JSONObject>(){
            public void onResponse(JSONObject response){
                try{
                    JSONArray jsonArrayPartidos=response.getJSONArray("results");
                    if(jsonArrayPartidos.length()>0) {
                        for (int i = 0; i < jsonArrayPartidos.length(); i++) {
                            JSONObject jsonPartido = jsonArrayPartidos.getJSONObject(i);

                            final int id = jsonPartido.getInt("id");
                            final String detalles = jsonPartido.getString("details");
                            final String equipo1 = jsonPartido.getString("team1");
                            final String equipo2 = jsonPartido.getString("team2");
                            final int goles1 = jsonPartido.getInt("goals1");
                            final int goles2 = jsonPartido.getInt("goals2");

                            final Partido nuevoPartido = new Partido(id, detalles, equipo1, equipo2, goles1, goles2);
                            miListaPartidos.add(nuevoPartido);

                        }
                    }
                }
                catch(JSONException je){ }

            } 
        },  new Response.ErrorListener() {
            public void onErrorResponse(VolleyError error) {
            }
        }
        );
        requestQueue.add(jSonObjectRequest);
    }
}

这是我的Partido课

public class Partido {
    private int id;
    private String detalles;
    private String equipo1;
    private String equipo2;
    private int goles1;
    private int goles2;

    public Partido(int id, String detalles, String equipo1, String equipo2, int goles1, int goles2){    
        this.id=id;
        this.detalles=detalles;
        this.equipo1=equipo1;
        this.equipo2=equipo2;
        this.goles1=goles1;
        this.goles2=goles2;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDetalles() {
        return detalles;
    }

    public void setDetalles(String detalles) {
        this.detalles = detalles;
    }

    public String getEquipo1() {
        return equipo1;
    }

    public void setEquipo1(String equipo1) {
        this.equipo1 = equipo1;
    }

    public String getEquipo2() {
        return equipo2;
    }

    public void setEquipo2(String equipo2) {
        this.equipo2 = equipo2;
    }

    public int getGoles1() {
        return goles1;
    }

    public void setGoles1(int goles1) {
        this.goles1 = goles1;
    }

    public int getGoles2() {
        return goles2;
    }

    public void setGoles2(int goles2) {
        this.goles2 = goles2;
    }
}

【问题讨论】:

  • 你能展示你的Partido类构造函数吗
  • 使用Gson解析Response!
  • 您能否在此处发布您的响应 JSON 以进行检查。
  • 这是 json 的 URL api.myjson.com/bins/yc15a
  • @ExiledLlama 能否解决问题以在 Activity Act1_1_​​2 中接收 ArrayList listaEq 数据

标签: android arrays json android-volley


【解决方案1】:

请在 Partido 类中实现Serializable

public class Partido implements Serializable {
    private int id;
    private String detalles;
    private String equipo1;
    private String equipo2;
    private int goles1;
    private int goles2;

    public Partido(int id, String detalles, String equipo1, String equipo2, int goles1, int goles2){    
        this.id=id;
        this.detalles=detalles;
        this.equipo1=equipo1;
        this.equipo2=equipo2;
        this.goles1=goles1;
        this.goles2=goles2;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDetalles() {
        return detalles;
    }

    public void setDetalles(String detalles) {
        this.detalles = detalles;
    }

    public String getEquipo1() {
        return equipo1;
    }

    public void setEquipo1(String equipo1) {
        this.equipo1 = equipo1;
    }

    public String getEquipo2() {
        return equipo2;
    }

    public void setEquipo2(String equipo2) {
        this.equipo2 = equipo2;
    }

    public int getGoles1() {
        return goles1;
    }

    public void setGoles1(int goles1) {
        this.goles1 = goles1;
    }

    public int getGoles2() {
        return goles2;
    }

    public void setGoles2(int goles2) {
        this.goles2 = goles2;
    }
}

这是Act1_1_​​2中接收数据的代码

misPartidos = (ArrayList<Partido>) getIntent().getSerializableExtra("listaEq2");

希望对你有所帮助!

【讨论】:

  • 我一直收到同样的错误信息,谢谢
  • @ExiledLlama 请分享你的Logcat
  • @ExiledLlama 你能调试你的应用程序吗,因为我认为你的 for 循环有问题并进入 id, int id1=(Integer.parseInt((String)v.getTag())); for(int i=(((id1-1)*6)); i
  • @ExiledLlama 请添加此行 Log.i("TAG",id1.toString());下面 int id1=(Integer.parseInt((String)v.getTag()));这一行,然后告诉我 id1 的值是什么
【解决方案2】:

如果您的列表为空,则可能是 Json 本身存在问题。有时他们有一些额外的字符,所以

  1. 尝试使用JsonLintCode beautify 验证您的Json

  2. 在您的 catch Json 异常块中,尝试打印堆栈跟踪并获取消息


 catch(JSONException je){
    je.printStackTrace();
     Log.d("ERR",je.getMessage()) ;
 }

【讨论】:

  • JsonLint 说它是一个有效的 Json
  • 调试按钮点击,我的朋友。你的朋友回复成功了吗?
  • 我收到“运行 Act1_1 时出错,必须导出活动或包含意图过滤器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 2020-01-25
  • 1970-01-01
相关资源
最近更新 更多