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);
}
}
ありがとう –