错误的Android Cardview和回收站与排球 [英] Error Android Cardview and Recycler with Volley
问题描述
我有一些code解析JSON数据cardview和回收与排球。我想说明的JSON数据到我的片段。我得到的错误,但我不知道是什么原因造成的。也许任何人都可以帮我请。
这是我的片段。
公共类HomeFragment扩展android.support.v4.app.Fragment {
私有静态最后字符串变量= HomeActivity.class.getSimpleName();
私人的ArrayList<列表项> listItems中;
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
捆绑savedInstanceState){
查看rootView = inflater.inflate(R.layout.fragment_home,集装箱,假);
ParseData();
RecyclerView recyclerView =(RecyclerView)getActivity()findViewById(R.id.recycler_list)。
recyclerView.setHasFixedSize(真正的);
recyclerView.setAdapter(新ListCardAdapter(listItems中,R.layout.report_list_item));
recyclerView.setLayoutManager(新LinearLayoutManager(getActivity()));
recyclerView.setLayoutManager(新GridLayoutManager(getActivity(),2));
recyclerView.setItemAnimator(新DefaultItemAnimator());
//充气的布局该片段
返回rootView;
}
私人无效ParseData(){
JsonArrayRequest listReq =新JsonArrayRequest(AppConfig.URL_LIST,
新Response.Listener< JSONArray>(){
@覆盖
公共无效onResponse(JSONArray响应){
Log.d(TAG,response.toString());
//解析JSON
的for(int i = 0; I< response.length();我++){
尝试 {
JSONObject的OBJ = response.getJSONObject(我);
列表项的listItem =新的ListItem();
listItem.setDesc(obj.getString(降序));
字符串图像= obj.isNull(图像)?空:obj.getString(图像);
listItem.setImge(图像);
//添加电影电影阵列
listItems.add(的listItem);
}赶上(JSONException E){
e.printStackTrace();
}
}
ListCardAdapter.notifyDataSetChanged();
}
},新Response.ErrorListener(){
@覆盖
公共无效onErrorResponse(VolleyError错误){
VolleyLog.d(TAG,错误:+ error.getMessage());
}
});
//添加请求,请求队列
。VolleyController.getInstance()addToRequestQueue(listReq);
}
这是我的适配器。
公共类ListCardAdapter扩展RecyclerView.Adapter< ListCardAdapter.ViewHolder> {
私人最终字符串变量= this.getClass()getSimpleName()。
私人列表< TerbaruItem> terbaruItems;
私人诠释itemLayout;
ImageLoader的ImageLoader的= VolleyController.getInstance()getImageLoader()。
公共ListCardAdapter(名单<列表项>的数据,诠释itemLayout){
listItems中=数据;
this.itemLayout = itemLayout;
}
公共静态类ViewHolder扩展RecyclerView.ViewHolder实现AdapterView.OnClickListener {
公众ReportImageView形象;
公共TextView的说明;
公共ViewHolder(查看ItemView控件){
超(ItemView控件);
itemView.setOnClickListener(本);
图像=(ReportImageView)itemView.findViewById(R.id.image);
DESC =(TextView中)itemView.findViewById(R.id.desc);
}
@覆盖
公共无效的onClick(视图查看){
Toast.makeText(view.getContext(),OnItemClick:DToast.LENGTH_SHORT).show();
}
}
@覆盖
公共ViewHolder onCreateViewHolder(ViewGroup中父,int i)以{
查看itemLayoutView = LayoutInflater.from(parent.getContext())膨胀(itemLayout,父母,假)。
ViewHolder viewHolder =新ViewHolder(itemLayoutView);
返回viewHolder;
}
@覆盖
公共无效onBindViewHolder(ViewHolder viewHolder,INT位置){
列表项的listItem = listItems.get(位置);
viewHolder.desc.setText(listItem.getDesc());
//饲料形象
如果(listItem.getImge()!= NULL){
viewHolder.image.setImageUrl(listItem.getImge(),ImageLoader的);
viewHolder.image.setVisibility(View.VISIBLE);
viewHolder.image
.setResponseObserver(新LaporanImageView.ResponseObserver(){
@覆盖
公共无效onerror的(){
}
@覆盖
公共无效的onSuccess(){
}
});
} 其他 {
viewHolder.image.setVisibility(View.GONE);
}
viewHolder.itemView.setTag(terbaruItem);
}
@覆盖
公众诠释getItemCount(){
返回listItems.size();
}
}
和这个错误,当我运行的应用程序。
了java.lang.RuntimeException:无法启动活动ComponentInfo {com.company.report/com.company.report.activity.HomeActivity}:显示java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:4424)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
在dalvik.system.NativeStart.main(本机方法)
显示java.lang.NullPointerException:产生的原因
在id.co.aascenter.suarawarga.activity.HomeFragment.onCreateView(HomeFragment.java:126)
在android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
在android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133)
在android.app.Activity.performStart(Activity.java:4475)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:4424)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
在dalvik.system.NativeStart.main(本机方法)
您可以参考我下面的示例code。我已经测试。
公共类RecycleCardActivityFragment扩展片段{
私人最终名单,其中,人物> mPersonList =新的ArrayList<>();
公共RecycleCardActivityFragment(){
}
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
捆绑savedInstanceState){
查看查看= inflater.inflate(R.layout.fragment_recycle_card,集装箱,假);
上下文的背景下= getActivity();
RecyclerView recyclerView =(RecyclerView)view.findViewById(R.id.recycleView);
recyclerView.setHasFixedSize(真正的);
LinearLayoutManager的layoutManager =新LinearLayoutManager(上下文);
recyclerView.setLayoutManager(的layoutManager);
最后RVAdapter rvAdapter =新RVAdapter(mPersonList);
recyclerView.setAdapter(rvAdapter);
请求队列请求队列= Volley.newRequestQueue(上下文);
字符串URL =http://192.16.1.100/api/persons;
JsonArrayRequest jsonArrayRequest =新JsonArrayRequest(URL,新Response.Listener< JSONArray>(){
@覆盖
公共无效onResponse(JSONArray响应){
尝试 {
如果(response.length()大于0){
mPersonList.clear();
的for(int i = 0; I< response.length();我++){
的JSONObject的JSONObject = response.getJSONObject(我);
人人=新的Person();
如果(!jsonObject.isNull(名字)){
person.name = jsonObject.getString(姓名);
}
如果(!jsonObject.isNull(时代)){
person.age = jsonObject.getInt(时代);
}
mPersonList.add(我,人);
}
rvAdapter.notifyDataSetChanged();
}
}赶上(JSONException E){
e.printStackTrace();
}
}
},新Response.ErrorListener(){
@覆盖
公共无效onErrorResponse(VolleyError错误){
Log.e(凌空,error.toString());
}
});
requestQueue.add(jsonArrayRequest);
返回查看;
}
}
关于人
类和 RVAdapter
类,请看看我的答案在以下问题
<一个href="http://stackoverflow.com/questions/32492011/how-to-load-datajson-into-recycler-view-using-volley">How加载使用凌空数据(JSON)到回收视图
希望这有助于!
I have some code to parse JSON data to cardview and recycler with Volley. I want to show json data into my Fragment. I'm getting error but I don't know what is causing it. Anyone maybe can help me please.
This my Fragment.
public class HomeFragment extends android.support.v4.app.Fragment {
private static final String TAG = HomeActivity.class.getSimpleName();
private ArrayList<ListItem> listItems;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
ParseData();
RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler_list);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(new ListCardAdapter(listItems, R.layout.report_list_item));
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2));
recyclerView.setItemAnimator(new DefaultItemAnimator());
// Inflate the layout for this fragment
return rootView;
}
private void ParseData(){
JsonArrayRequest listReq = new JsonArrayRequest(AppConfig.URL_LIST,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
ListItem listItem = new ListItem();
listItem.setDesc(obj.getString("desc"));
String image = obj.isNull("image") ? null : obj.getString("image");
listItem.setImge(image);
// adding movie to movies array
listItems.add(listItem);
} catch (JSONException e) {
e.printStackTrace();
}
}
ListCardAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
}
});
// Adding request to request queue
VolleyController.getInstance().addToRequestQueue(listReq);
}
This my Adapter.
public class ListCardAdapter extends RecyclerView.Adapter<ListCardAdapter.ViewHolder> {
private final String TAG = this.getClass().getSimpleName();
private List<TerbaruItem> terbaruItems;
private int itemLayout;
ImageLoader imageLoader = VolleyController.getInstance().getImageLoader();
public ListCardAdapter(List<ListItem> data, int itemLayout){
listItems = data;
this.itemLayout = itemLayout;
}
public static class ViewHolder extends RecyclerView.ViewHolder implements AdapterView.OnClickListener {
public ReportImageView image;
public TextView desc;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
image = (ReportImageView) itemView.findViewById(R.id.image);
desc = (TextView) itemView.findViewById(R.id.desc);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "OnItemClick :D", Toast.LENGTH_SHORT).show();
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
ListItem listItem = listItems.get(position);
viewHolder.desc.setText(listItem.getDesc());
// Feed image
if (listItem.getImge() != null) {
viewHolder.image.setImageUrl(listItem.getImge(), imageLoader);
viewHolder.image.setVisibility(View.VISIBLE);
viewHolder.image
.setResponseObserver(new LaporanImageView.ResponseObserver() {
@Override
public void onError() {
}
@Override
public void onSuccess() {
}
});
} else {
viewHolder.image.setVisibility(View.GONE);
}
viewHolder.itemView.setTag(terbaruItem);
}
@Override
public int getItemCount() {
return listItems.size();
}
}
And this error when i run app.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.report/com.company.report.activity.HomeActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at id.co.aascenter.suarawarga.activity.HomeFragment.onCreateView(HomeFragment.java:126)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133)
at android.app.Activity.performStart(Activity.java:4475)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
You can refer my following sample code. I have tested.
public class RecycleCardActivityFragment extends Fragment {
private final List<Person> mPersonList = new ArrayList<>();
public RecycleCardActivityFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_recycle_card, container, false);
Context context = getActivity();
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycleView);
recyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
recyclerView.setLayoutManager(layoutManager);
final RVAdapter rvAdapter = new RVAdapter(mPersonList);
recyclerView.setAdapter(rvAdapter);
RequestQueue requestQueue = Volley.newRequestQueue(context);
String url = "http://192.16.1.100/api/persons";
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
if (response.length() > 0) {
mPersonList.clear();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject = response.getJSONObject(i);
Person person = new Person();
if (!jsonObject.isNull("name")) {
person.name = jsonObject.getString("name");
}
if (!jsonObject.isNull("age")) {
person.age = jsonObject.getInt("age");
}
mPersonList.add(i, person);
}
rvAdapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VOLLEY", error.toString());
}
});
requestQueue.add(jsonArrayRequest);
return view;
}
}
About the Person
class and RVAdapter
class, please take a look at my answer at the following question
Hope this helps!
这篇关于错误的Android Cardview和回收站与排球的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!