简体   繁体   中英

Android Volley Recyclerview, it works sometimes, but mostly not at all

So I made a recyclerview and when I ran the first time the code it worked. However, when I open my app again just to see it fails to populate the recyclerview list. time to time it will work, like when I have to change the IP again, but then it doesn't always. I'm left wondering why it fails, i only have 4 data records and 5 textviews inside each recylerview row.

Please help, I don't have anyone to check my codes personally so I'm appealing to the community, this is for my final thesis, not the exact codes, but once I get the hang of the recyclerview I think I could finish in time.

I have the my codes in github: https://github.com/jhungamesh/Volleylist3

It is totally not encouraged to give URL of your whole project when it consists only of a total of 5 files and only 2 files are relevant to your error .

In your file BackgroundTask you are getting json from:

String json_url = "http://192.168.1.109/Sup2.php";

which is not at all reachable from outside of your network.

posting working code by given in answer here

MainActivity:

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerAdapter adapter;
    RecyclerView.LayoutManager layoutManager;
    ArrayList<Scoreboard_Item> arrayList;

    //Your Url Change Live Url Put Here
    String mJSONURLString = "http://192.168.1.109/Sup2.php";

    //My testing Url
    String mJSONURLStrings = "http://pastebin.com/raw/Em972E5s";

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

        arrayList=new ArrayList<>();
        recyclerView = (RecyclerView) findViewById(R.id.RecList);
        CallApi();

       /// BackgroundTask backgroundTask = new BackgroundTask(MainActivity.this);
      //  arrayList = backgroundTask.getList();
        //fillPeople();


    }


    public void CallApi(){
        RequestQueue requestQueue = Volley.newRequestQueue(getBaseContext());

        // Initialize a new JsonArrayRequest instance
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                Request.Method.POST,
                mJSONURLStrings,
                 null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        for(int i=0;i<response.length();i++){

                            JSONObject data = null;
                            try {
                                data = response.getJSONObject(i);

                                //My Data
                                String firstName = data.getString("firstname");
                                String lastName = data.getString("lastname");
                                String age = data.getString("age");

                                //Scoreboard_Item scoreboard_item = new Scoreboard_Item(student.getString("Username"), student.getString("Team1"), student.getString("Team2"), student.getString("Sport"), student.getString("Status"));
                                Scoreboard_Item scoreboard_item = new Scoreboard_Item(firstName, lastName, age, age, firstName);

                                arrayList.add(scoreboard_item);
                                layoutManager = new LinearLayoutManager(getBaseContext());
                                recyclerView.setLayoutManager(layoutManager);
                                recyclerView.setHasFixedSize(true);
                                adapter = new RecyclerAdapter(arrayList);
                                recyclerView.setAdapter(adapter);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                            // Get the current student (json object) data


                            // Display the formatted json data in text view

                        }
                    }
                },
                new Response.ErrorListener(){
                    @Override
                    public void onErrorResponse(VolleyError error){
                        // Do something when error occurred

                    }
                }
        );

        // Add JsonArrayRequest to the RequestQueue
        requestQueue.add(jsonArrayRequest);

}
}

Model class

public class Scoreboard_Item {

String Username, Team1, Team2, Sport, Status;


public Scoreboard_Item(String username, String team1, String team2, String sport, String status) {
    this.setUsername(username);
    this.setTeam1(team1);
    this.setTeam2(team2);
    this.setSport(sport);
    this.setStatus(status);
}

public String getUsername() {
    return Username;
}

public void setUsername(String username) {
    Username = username;
}

public String getTeam1() {
    return Team1;
}

public void setTeam1(String team1) {
    Team1 = team1;
}

public String getTeam2() {
    return Team2;
}

public void setTeam2(String team2) {
    Team2 = team2;
}

public String getSport() {
    return Sport;
}

public void setSport(String sport) {
    Sport = sport;
}

public String getStatus() {
    return Status;
}

public void setStatus(String status) {
    Status = status; }}

Adapter

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>{

ArrayList<Scoreboard_Item> arrayList = new ArrayList<>();

public RecyclerAdapter(ArrayList<Scoreboard_Item> arrayList){
    this.arrayList = arrayList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent,false);
    MyViewHolder myViewHolder = new MyViewHolder(view);
    return myViewHolder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.Username.setText(arrayList.get(position).getUsername());
    holder.Team1.setText(arrayList.get(position).getTeam1());
    holder.Team2.setText(arrayList.get(position).getTeam2());
    holder.Sport.setText(arrayList.get(position).getSport());
    holder.Status.setText(arrayList.get(position).getStatus());

}

@Override
public int getItemCount() {
    return arrayList.size();
}

public static class MyViewHolder extends RecyclerView.ViewHolder
{
    TextView Username, Team1, Team2, Sport, Status;
    //ImageView imageView;
    public MyViewHolder(View itemView) {
        super(itemView);
       //imageView =(ImageView) itemView.findViewById(R.id.imageView);
        Username = (TextView)itemView.findViewById(R.id.Username);
        Team1 = (TextView)itemView.findViewById(R.id.Team1);
        Team2 = (TextView)itemView.findViewById(R.id.Team2);
        Sport = (TextView)itemView.findViewById(R.id.Sport);
        Status = (TextView)itemView.findViewById(R.id.Status);
    }   }}
    //Add This Library in app gradle   
      implementation 'com.android.volley:volley:1.1.0'
    //Not Use
    //Depricate compile 'com.mcxiaoke.volley:library:1.0.19'

   public void CallApi(){
        RequestQueue requestQueue = Volley.newRequestQueue(getBaseContext());

        // Initialize a new JsonArrayRequest instance
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                Request.Method.POST,
                mJSONURLStrings,
                 null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        for(int i=0;i<response.length();i++){

                            JSONObject data = null;
                            try {
                                data = response.getJSONObject(i);

                                //My Data
                                String firstName = data.getString("firstname");
                                String lastName = data.getString("lastname");
                                String age = data.getString("age");

                                //Scoreboard_Item scoreboard_item = new Scoreboard_Item(student.getString("Username"), student.getString("Team1"), student.getString("Team2"), student.getString("Sport"), student.getString("Status"));
                                Scoreboard_Item scoreboard_item = new Scoreboard_Item(firstName, lastName, age, age, firstName);

                                arrayList.add(scoreboard_item);
                                layoutManager = new LinearLayoutManager(getBaseContext());
                                recyclerView.setLayoutManager(layoutManager);
                                recyclerView.setHasFixedSize(true);
                                adapter = new RecyclerAdapter(arrayList);
                                recyclerView.setAdapter(adapter);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                },
                new Response.ErrorListener(){
                    @Override
                    public void onErrorResponse(VolleyError error){
                        // Do something when error occurred

                    }
                }
        );
        // Add JsonArrayRequest to the RequestQueue
        requestQueue.add(jsonArrayRequest);

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM