Recyclerview无法正常工作,应用程序崩溃了

时间:2017-04-07 18:52:49

标签: java android android-studio

    package com.example.sander.app;

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

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 org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

/**
 * Created by Sander on 6-4-2017.
 */

public class RecycleFrame extends Fragment {
    ArrayList<String> names = new ArrayList<>();
    ArrayList<Integer> cPoints = new ArrayList<>();

    boolean sort = false;
    public RecycleFrame() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.fragment_view, menu);
        super.onCreateOptionsMenu(menu,inflater);
    }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_recycle, container, false);
        final RecyclerView VRecyclerView = (RecyclerView) view.findViewById(R.id.rv_recycler_view);
        RequestQueue rq = Volley.newRequestQueue(getActivity().getApplicationContext());
        String url= "http://test.dontstealmywag.ga/api/parkgarage_all.php";
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Do something with the response
                        try{
                            JSONObject o = new JSONObject(response);
                            JSONArray values=o.getJSONArray("");
                            for ( int i=0; i< values.length(); i++) {
                                JSONObject jsonObject = values.getJSONObject(i);
                                names.add(jsonObject.getString("parkgarage_name"));
                                cPoints.add(jsonObject.getInt("charging_capacity")); // I want to add this to the recycler viewer
                            }
                        }  catch (JSONException ex){}

                        Collections.sort(names);
                        VRecyclerView.setHasFixedSize(true);
                        RecycleAdapter adapter = new RecycleAdapter(names, cPoints);
                        VRecyclerView.setAdapter(adapter);
                        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
                        VRecyclerView.setLayoutManager(llm);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // Handle error
                    }
                });
        rq.add(stringRequest);
        return view;
    }
}

这是我的RecyclerFrame的代码,在这里你可以看到cPoints.add(jsonObject.getInt("charging_capacity"));我想在RecyclerViewer中显示这个,现在我只能显示names数组。

这是我的RecyclerAdapter代码:

    package com.example.sander.app;

import android.app.Fragment;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by Sander on 6-4-2017.
 */

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

    ArrayList<String> ArrayDataset;
    ArrayList<Integer> ArrayDataset2;
    public static class MyViewHolder extends RecyclerView.ViewHolder{
        public CardView mCardView;
        public TextView mTextView;
        public TextView mTextView2;
        public ImageView mImageView;
        public MyViewHolder(View v){
            super(v);

            mCardView = (CardView) v.findViewById(R.id.card_view);
            mTextView = (TextView) v.findViewById(R.id.tv_blah);
            mTextView2 = (TextView) v.findViewById(R.id.tv_blah2);
            mImageView = (ImageView) v.findViewById(R.id.imageView1);
        }

    }

    public RecycleAdapter(ArrayList<String> names, ArrayList<Integer> cPoints){
        ArrayDataset = names;
        ArrayDataset2= cPoints;
    }

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

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position){
        holder.mTextView.setText(ArrayDataset.get(position));
        holder.mTextView2.setText(ArrayDataset2.get(position));
        holder.mImageView.setImageResource(R.drawable.ic_local_parking_black_24dp);
    }

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

这是我做过的代码,但是当我在我的应用程序中打开它时,应用程序崩溃了,任何人都可以帮我解决这个问题

更新代码后的Logcat

04-07 18:47:59.341 5581-5581/com.example.sander.app E/RecyclerView: No adapter attached; skipping layout
04-07 18:47:59.344 5581-5712/com.example.sander.app D/NetworkSecurityConfig: No Network Security Config specified, using platform default
04-07 18:47:59.493 5581-5581/com.example.sander.app W/ResourceType: No package identifier when getting value for resource number 0x00000000
04-07 18:47:59.493 5581-5581/com.example.sander.app D/AndroidRuntime: Shutting down VM
04-07 18:47:59.494 5581-5581/com.example.sander.app E/AndroidRuntime: FATAL EXCEPTION: main
                                                                      Process: com.example.sander.app, PID: 5581
                                                                      android.content.res.Resources$NotFoundException: String resource ID #0x0
                                                                          at android.content.res.Resources.getText(Resources.java:335)
                                                                          at android.widget.TextView.setText(TextView.java:4555)
                                                                          at com.example.sander.app.RecycleAdapter.onBindViewHolder(RecycleAdapter.java:56)
                                                                          at com.example.sander.app.RecycleAdapter.onBindViewHolder(RecycleAdapter.java:21)
                                                                          at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356)
                                                                          at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389)
                                                                          at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335)
                                                                          at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598)
                                                                          at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
                                                                          at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
                                                                          at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
                                                                          at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
                                                                          at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
                                                                          at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
                                                                          at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
                                                                          at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
                                                                          at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)
                                                                          at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                                                          at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1391)
                                                                          at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1193)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                          at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                          at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
04-07 18:47:59.494 5581-5581/com.example.sander.app E/AndroidRuntime:     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                          at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                          at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                          at com.android.internal.policy.DecorView.onLayout(DecorView.java:726)
                                                                          at android.view.View.layout(View.java:17637)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                          at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346)
                                                                          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068)
                                                                          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
                                                                          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
                                                                          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
                                                                          at android.view.Choreographer.doCallbacks(Choreographer.java:686)
                                                                          at android.view.Choreographer.doFrame(Choreographer.java:621)
                                                                          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
                                                                          at android.os.Handler.handleCallback(Handler.java:751)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                          at android.os.Looper.loop(Looper.java:154)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

2 个答案:

答案 0 :(得分:0)

崩溃是因为你在mTextView2的setTextView方法上设置一个接受Charsequence的整数 您的代码应该类似于holder.mTextView2.setText(String.valueOf(ArrayDataset2.get(position)));

答案 1 :(得分:0)

试试这个

    @Override
public void onBindViewHolder(MyViewHolder holder, int position){
    holder.mTextView.setText(String.valueOf(ArrayDataset.get(position)));
    holder.mTextView2.setText(String.valueOf(ArrayDataset2.get(position)));
    holder.mImageView.setImageResource(R.drawable.ic_local_parking_black_24dp);
}
相关问题