2017-11-25 146 views
0

下午好,我试图从警方数据网站获取一些数据。ReyclerView。警察数据Json - 没有适配器连接,跳过布局

不幸的是,该应用程序不显示任何数据说“E/RecyclerView:没有附加适配器;跳过布局”。

我已附上LatestCrimesActivity,适配器和ListItem类。

谢谢你的帮助。

这是LatestCrimesActivity

package com.example.cosmin.crimerate.Latest_crimes_api; 

import android.app.ProgressDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 

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.StringRequest; 
import com.android.volley.toolbox.Volley; 
import com.example.cosmin.crimerate.R; 

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

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

public class LatestCrimesActivity extends AppCompatActivity { 
    private static final String URL_DATA = "https://data.police.uk/api/crimes-street/all-crime?poly=52.268,0.543:52.794,0.238:52.130,0.478&date=2017-01"; 

    private RecyclerView recyclerView; 
    private RecyclerView.Adapter adapter; 

    private List<ListItem> listItems; 

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

     recyclerView = (RecyclerView) findViewById(R.id.recyclerViewlatest); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 


     listItems=new ArrayList<>(); 

     loadRecyclerViewData(); 


     } 

    private void loadRecyclerViewData() { 

     final ProgressDialog progressDialog = new ProgressDialog(this); 
     progressDialog.setMessage("Loading data..."); 
     progressDialog.show(); 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, 
       URL_DATA, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String s) { 
         progressDialog.dismiss(); 
         try { 
          JSONObject jsonObject = new JSONObject(s); 
          JSONArray array = jsonObject.getJSONArray(""); 

          for (int i=0; i<array.length();i++){ 
           JSONObject o = array.getJSONObject(i); 

           ListItem item = new ListItem(
             o.getString("category"), 
             o.getString("location_type"), 
             o.getString("street"), 
             o.getString("status") 
           ); 
           listItems.add(item); 

          } 
          adapter = new MyAdapter(listItems, getApplicationContext()); 
          recyclerView.setAdapter(adapter); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError volleyError) { 

        } 
       }); 

     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 


} 

适配器:

package com.example.cosmin.crimerate.Latest_crimes_api; 

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Adapter; 
import android.widget.TextView; 

import com.example.cosmin.crimerate.R; 

import java.util.List; 

/** 
* Created by Cosmin on 25/11/2017. 
*/ 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 



    private List<ListItem> listItems; 

    private Context context; 

    public MyAdapter(List<ListItem> listItems, LatestCrimesActivity latestCrimesActivity) { 
     this.listItems = listItems; 
     this.context = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.list_item, parent, false); 
     return new ViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     ListItem listItem = listItems.get(position); 

     holder.textViewCat.setText(listItem.getCategory()); 
     holder.textViewLoc.setText(listItem.getLocation()); 
     holder.textViewStreet.setText(listItem.getStreet()); 
     holder.textViewStatus.setText(listItem.getStatus()); 


    } 

    @Override 
    public int getItemCount() { 

     return listItems.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder{ 

     public TextView textViewCat; 
     public TextView textViewLoc; 
     public TextView textViewStreet; 
     public TextView textViewStatus; 


     public ViewHolder(View itemView) { 

      super(itemView); 

      textViewCat = (TextView) itemView.findViewById(R.id.textViewCat); 
      textViewLoc = (TextView) itemView.findViewById(R.id.textViewLoc); 
      textViewStreet = (TextView) itemView.findViewById(R.id.textViewStreet); 
      textViewStatus = (TextView) itemView.findViewById(R.id.textViewStatus); 

     } 
    } 
} 

这是ListItem类:

package com.example.cosmin.crimerate.Latest_crimes_api; 

/** 
* Created by Cosmin on 25/11/2017. 
*/ 

public class ListItem { 

    private String category; 
    private String location; 
    private String street; 
    private String status; 

    public ListItem (String category, String location, String street, String status){ 
     this.category=category; 
     this.location=location; 
     this.street=street; 
     this.status=status; 
    } 
    public String getCategory(){ 
     return category; 
    } 
    public String getLocation(){ 
     return location; 
    } 
    public String getStreet(){ 
     return street; 
    } 
    public String getStatus(){ 
     return status; 
    } 

} 

回答

0

刚刚尝试改变一些线路。首先在你的API调用之前设置适配器。

recyclerView = (RecyclerView) findViewById(R.id.recyclerViewlatest); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    listItems=new ArrayList<>(); 
    adapter = new MyAdapter(listItems, getApplicationContext()); 
    recyclerView.setAdapter(adapter); 

然后,当你收到的答案,填写listItems中,然后调用适配器对象的notifyDataSetChange()方法。

+0

是的,它的工作部分。按照你的步骤,错误消失了,不幸的是,数据仍然没有出现。 :( – SamSu

+0

你叫我说的方法吗? –

+0

是的,当然,不幸的是我相信这个json是无效的:(。如果你可以请看看我 – SamSu

相关问题