0

データをロードするのにvolleyを使用していますが、recyclerviewにjsonobjectを表示できません。どうすればjsonobjectデータをrecyclerviewに表示することができますか?または、jsonobjectをStringRequestに変換するには、私はrecyclerviewにStringRequestを表示できますか?volleyでrecyclerviewにjsonobjectをロード

APIのURL = http://alexer.ir/api/country/IR

ビルドのGradle

compile 'com.android.support:appcompat-v7:25.3.1' 
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7' 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:recyclerview-v7:25.3.1' 
compile 'com.android.support:cardview-v7:25.3.1' 
compile 'com.android.volley:volley:1.0.0' 
compile files('libs/KGJsonConverter.jar') 
compile files('libs/gson-2.3.1.jar') 

項目

public class Item implements Serializable { 
public int status; 
public int number; 
public String site; 
public float daily_time_on_site; 
public float description; 
public float daily_pageviews; 
public float traffic_from_search; 
public float total_sites_linking_in; 

     } 

ItemAdapter

 public class ItemAdapter extends 
     RecyclerView.Adapter<ItemAdapter.ItemViewHolder> { 

private Context contax; 
private ArrayList<Item> itemlist; 

public ItemAdapter(Context context , ArrayList<Item >itemlist){ 
    this.contax=context; 
    this.itemlist=itemlist; 
} 

@Override 
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    LayoutInflater inflater=LayoutInflater.from(parent.getContext()); 
    View view=inflater.from(parent.getContext()) 
      .inflate(R.layout.layout_cardview_layout,parent,false); 
    ItemViewHolder itemViewHolder=new ItemViewHolder(view); 
    return itemViewHolder; 
} 

@Override 
public void onBindViewHolder(ItemViewHolder holder, int position) { 

    Item item=itemlist.get(position); 

    holder.number.setText(item.number); 
    holder.site.setText(item.site); 
    holder.daily_time_on_site.setText(""+item.daily_time_on_site); 
    holder.description.setText(""+item.description); 
    holder.daily_pageviews.setText(""+item.daily_pageviews); 
    holder.traffic_from_search.setText(""+item.traffic_from_search); 
    holder.total_sites_linking_in.setText(""+item.total_sites_linking_in); 


} 

@Override 
public int getItemCount() { 
    if (itemlist !=null){ 
     return itemlist.size(); 

    } 

return 0; 
    } 

    public static class ItemViewHolder extends RecyclerView.ViewHolder 
    { 


public CardView cvItem; 
public TextView number; 
public TextView site; 
public TextView daily_time_on_site; 
public TextView description; 
public TextView daily_pageviews; 
public TextView traffic_from_search; 
public TextView total_sites_linking_in; 


public ItemViewHolder(View itemView) { 
    super(itemView); 

    cvItem=(CardView)itemView.findViewById(R.id.cvItem); 
    number= (TextView) itemView.findViewById(R.id.number); 
    site= (TextView) itemView.findViewById(R.id.site); 
    daily_time_on_site= (TextView) itemView.findViewById(R.id.daily_time_on_site); 
    description= (TextView) itemView.findViewById(R.id.description); 
    daily_pageviews= (TextView) itemView.findViewById(R.id.daily_pageviews); 
    traffic_from_search= (TextView) itemView.findViewById(R.id.traffic_from_search); 
    total_sites_linking_in= (TextView) itemView.findViewById(R.id.total_sites_linking_in); 



     } 
     } 

     } 

MySingleton

public class MySingleton { 
private static MySingleton mInstance; 
private RequestQueue mRequestQueue; 
private ImageLoader mImageLoader; 
private static Context mCtx; 

private MySingleton(Context context) { 
    mCtx = context; 
    mRequestQueue = getRequestQueue(); 

    mImageLoader = new ImageLoader(mRequestQueue, 
      new ImageLoader.ImageCache() { 
       private final LruCache<String, Bitmap> 
         cache = new LruCache<String, Bitmap>(20); 

       @Override 
       public Bitmap getBitmap(String url) { 
        return cache.get(url); 
       } 

       @Override 
       public void putBitmap(String url, Bitmap bitmap) { 
        cache.put(url, bitmap); 
       } 
      }); 
} 

public static synchronized MySingleton getInstance(Context context) { 
    if (mInstance == null) { 
     mInstance = new MySingleton(context); 
    } 
    return mInstance; 
} 

public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     // getApplicationContext() is key, it keeps you from leaking the 
     // Activity or BroadcastReceiver if someone passes one in. 
     mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); 
    } 
    return mRequestQueue; 
} 

public <T> void addToRequestQueue(Request<T> req) { 
    getRequestQueue().add(req); 
} 

public ImageLoader getImageLoader() { 
    return mImageLoader; 
} 
} 

MainActivity

public class MainActivity extends AppCompatActivity { 
RecyclerView rvItem; 
CardView cvItem; 
TextView mTxtDisplay ,mtt; 
final String TAG ="MainActivity"; 

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


    mTxtDisplay = (TextView) findViewById(R.id.mTxtDisplay); 

    rvItem= (RecyclerView) findViewById(R.id.rvItem); 
    rvItem.setHasFixedSize(true); 
    cvItem= (CardView) findViewById(R.id.cvItem); 
    LinearLayoutManager manager=new 
LinearLayoutManager(this,LinearLayoutManager.VERTICAL,true); 
    rvItem.setLayoutManager(manager); 
    String url="http://alexer.ir/api/country/IR"; 



    //jsonobject start 


    JsonObjectRequest jsObjRequest = new JsonObjectRequest 
      (Request.Method.GET, url, null, new 
    Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 

        try { 
         String data=response.getString("data"); 

    Toast.makeText(getApplicationContext(),data,Toast.LENGTH_LONG).show(); 


    ArrayList<Item> productList = new JsonConverter<Item>().toArrayList(data, 
    Item.class); 


         ItemAdapter adapter= new 
    ItemAdapter(getApplicationContext(),productList); 
         rvItem.setAdapter(adapter); 





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







       } 
      }, new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        // TODO Auto-generated method stub 

       } 
      }); 

    // Access the RequestQueue through your singleton class. 
    MySingleton.getInstance(this).addToRequestQueue(jsObjRequest); 


    } 

    } 

答えて

0

更新します以下のようにMainActivity:以下のように

public class MainActivity extends AppCompatActivity { 

    RecyclerView rvItem; 
    CardView cvItem; 
    TextView mTxtDisplay, mtt; 

    Context mContext; 
    ArrayList<Item> productList; 
    ItemAdapter adapter; 

    final String TAG = "MainActivity"; 

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

     // Context 
     mContext = this; 

     mTxtDisplay = (TextView) findViewById(R.id.mTxtDisplay); 

     rvItem= (RecyclerView) findViewById(R.id.rvItem); 
     rvItem.setHasFixedSize(true); 
     cvItem= (CardView) findViewById(R.id.cvItem); 
     LinearLayoutManager manager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,true); 
     rvItem.setLayoutManager(manager); 

     // Values 
     productList = new ArrayList<Item>(); 

     // Adapter 
     adapter = new ItemAdapter(mContext, productList); 
     rvItem.setAdapter(adapter); 

     // API 
     String url = "http://alexer.ir/api/country/IR"; 

     //jsonObject start 
     JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new 
      Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 

        try 
        { 
         JSONArray jsonArray = response.getJSONArray("data"); 


         // Looping through all objects and storing 
         // them in array list 
         for (int i = 0; i < jsonArray.length(); i++) { 

          JSONObject jsonObject = (JSONObject) jsonArray.get(i); 
          String number = jsonObject.getString("number"); 
          String site = jsonObject.getString("site"); 
          String description = jsonObject.getString("description"); 
          String daily_time_on_site = jsonObject.getString("daily_time_on_site"); 
          String daily_pageviews = jsonObject.getString("daily_pageviews"); 
          String traffic_from_search = jsonObject.getString("traffic_from_search"); 
          String total_sites_linking_in = jsonObject.getString("total_sites_linking_in"); 

          // Item 
          Item item = new Item(number, site, description, daily_time_on_site, daily_pageviews, 
            traffic_from_search, total_sites_linking_in); 

          // Add to list 
          productList.add(Item); 
         } 

         // Notifying adapter about data changes, so that the 
         // list renders with new data 
         adapter.notifyDataSetChanged(); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
         Toast.makeText(mContext, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
        } 
       } 
      }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       // TODO Auto-generated method stub 
      } 
     }); 

     // Access the RequestQueue through your singleton class. 
     MySingleton.getInstance(mContext).addToRequestQueue(jsObjRequest); 
    } 
} 

更新Itemクラス:

public class Item { 

    private int status; 
    private String number; 
    private String site; 
    private String description; 
    private String daily_time_on_site; 
    private String daily_pageviews; 
    private String traffic_from_search; 
    private String total_sites_linking_in; 

    public Item(String number, String site, String description, String daily_time_on_site, String daily_pageviews, 
       String traffic_from_search, String total_sites_linking_in) { 
     this.number = number; 
     this.site = site; 
     this.description = description; 
     this.daily_time_on_site = daily_time_on_site; 
     this.daily_pageviews = daily_pageviews; 
     this.traffic_from_search = traffic_from_search; 
     this.total_sites_linking_in = total_sites_linking_in; 
    } 

    public int getStatus() { 
     return status; 
    } 

    public void setStatus(int status) { 
     this.status = status; 
    } 

    public String getNumber() { 
     return number; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    public String getSite() { 
     return site; 
    } 

    public void setSite(String site) { 
     this.site = site; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getDaily_time_on_site() { 
     return daily_time_on_site; 
    } 

    public void setDaily_time_on_site(String daily_time_on_site) { 
     this.daily_time_on_site = daily_time_on_site; 
    } 

    public String getDaily_pageviews() { 
     return daily_pageviews; 
    } 

    public void setDaily_pageviews(String daily_pageviews) { 
     this.daily_pageviews = daily_pageviews; 
    } 

    public String getTraffic_from_search() { 
     return traffic_from_search; 
    } 

    public void setTraffic_from_search(String traffic_from_search) { 
     this.traffic_from_search = traffic_from_search; 
    } 

    public String getTotal_sites_linking_in() { 
     return total_sites_linking_in; 
    } 

    public void setTotal_sites_linking_in(String total_sites_linking_in) { 
     this.total_sites_linking_in = total_sites_linking_in; 
    } 
} 

希望がありますように〜

+0

ありがとう –

関連する問題