尝试调用虚方法' void android.widget.ListView.setAdapter(android.widget.ListAdapter)'片段

时间:2016-08-29 14:02:27

标签: android

我有像

这样的片段
public class FeedFragment extends Fragment {
private static final String TAG = FeedFragment.class.getSimpleName();
private ListView listView;
private FeedListAdapter listAdapter;
private List<FeedItem> feedItems;
private String URL_FEED = "http://api.androidhive.info/feed/feed.json";
private FragmentActivity fragmentActivity;
private Activity mActivity;


public static FeedFragment newInstance (){
    FeedFragment feedFragment = new FeedFragment();

    return feedFragment;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.feed_fragment, container, false);

    fragmentActivity = (FragmentActivity) super.getActivity();
    listView = (ListView) view.findViewById(R.id.list);

    feedItems = new ArrayList<>();
    listAdapter = new FeedListAdapter(mActivity, feedItems);
    listView.setAdapter(listAdapter);

    Cache cache = AppController.getInstance().getRequestQueue().getCache();
    Cache.Entry entry = cache.get(URL_FEED);
    if (entry != null){
        try {
            String data = new String (entry.data, "UTF-8");
            try {
                parseJsonFeed(new JSONObject(data));
            } catch (JSONException e){
                e.printStackTrace();
            }
        }catch (UnsupportedEncodingException e){
            e.printStackTrace();
        }
    } else {
        JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET,
                URL_FEED, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                VolleyLog.d(TAG, "Response:" + response.toString());
                if (response != null){
                    parseJsonFeed(response);
                }
            }
        },new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "ERROR:" + error.getMessage());
            }
        });

        AppController.getInstance().addToRequestQueue(jsonReq);
    }
    return view;
}

private void parseJsonFeed(JSONObject response){
    try {
        JSONArray feedArray = response.getJSONArray("feed");
        for (int i = 0;i < feedArray.length(); i++){
            JSONObject feedObj = (JSONObject) feedArray.get(i);

            FeedItem item = new FeedItem();
            item.setId(feedObj.getInt("id"));
            item.setName(feedObj.getString("name"));

            String image = feedObj.isNull("image")? null : feedObj
                    .getString("image");
            item.setImge(image);
            item.setStatus(feedObj.getString("status"));
            item.setProfilePic(feedObj.getString("profilePic"));
            item.setTimeStamp(feedObj.getString("timeStamp"));

            String feedUrl = feedObj.isNull("url")? null : feedObj
                    .getString("url");
            item.setUrl(feedUrl);

            feedItems.add(item);
        }

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

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mActivity = activity;
}

这是适配器

public class FeedListAdapter extends BaseAdapter{
private Activity activity;
private LayoutInflater inflater;
private List<FeedItem> feedItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();

public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
    this.activity = activity;
    this.feedItems = feedItems;
}

@Override
public int getCount() {
    return feedItems.size();
}

@Override
public Object getItem(int location) {
    return feedItems.get(location);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.feed_litem_list, null);

    if (imageLoader == null)
        imageLoader = AppController.getInstance().getImageLoader();

    TextView name = (TextView) convertView.findViewById(R.id.client_name);
    TextView timestamp = (TextView) convertView
            .findViewById(R.id.time_stamp);
    TextView statusMsg = (TextView) convertView
            .findViewById(R.id.txtStatusMgs);
    TextView url = (TextView) convertView.findViewById(R.id.txtUrl);
    NetworkImageView profilePic = (NetworkImageView) convertView
            .findViewById(R.id.profile_pic);
    FeedImageView feedImageView = (FeedImageView) convertView
            .findViewById(R.id.feedImage1);

    FeedItem item = feedItems.get(position);

    name.setText(item.getName());

    // Converting timestamp into x ago format
    CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
            Long.parseLong(item.getTimeStamp()),
            System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);
    timestamp.setText(timeAgo);

    // Chcek for empty status message
    if (!TextUtils.isEmpty(item.getStatus())) {
        statusMsg.setText(item.getStatus());
        statusMsg.setVisibility(View.VISIBLE);
    } else {
        // status is empty, remove from view
        statusMsg.setVisibility(View.GONE);
    }

    // Checking for null feed url
    if (item.getUrl() != null) {
        url.setText(Html.fromHtml("<a href=\"" + item.getUrl() + "\">"
                + item.getUrl() + "</a> "));

        // Making url clickable
        url.setMovementMethod(LinkMovementMethod.getInstance());
        url.setVisibility(View.VISIBLE);
    } else {
        // url is null, remove from the view
        url.setVisibility(View.GONE);
    }

    // user profile pic
    profilePic.setImageUrl(item.getProfilePic(), imageLoader);

    // Feed image
    if (item.getImge() != null) {
        feedImageView.setImageUrl(item.getImge(), imageLoader);
        feedImageView.setVisibility(View.VISIBLE);
        feedImageView
                .setResponseObserver(new FeedImageView.ResponseObserver() {
                    @Override
                    public void onError() {
                    }

                    @Override
                    public void onSuccess() {
                    }
                });
    } else {
        feedImageView.setVisibility(View.GONE);
    }

    return convertView;
}

现在错误显示为

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                                                                              at com.evolustudios.askin.askin.src.fragments.FeedFragment.onCreateView(FeedFragment.java:63)
                                                                              at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
                                                                              at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
                                                                              at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
                                                                              at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
                                                                              at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638)
                                                                              at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)
                                                                              at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
                                                                              at android.support.v4.view.ViewPager.populate(ViewPager.java:1240)
                                                                              at android.support.v4.view.ViewPager.populate(ViewPager.java:1088)
                                                                              at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614)
                                                                              at android.view.View.measure(View.java:18788)
                                                                              at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                              at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:706)
                                                                              at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90)
                                                                              at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1364)
                                                                              at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:771)
                                                                              at android.view.View.measure(View.java:18788)
                                                                              at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                              at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                              at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                                              at android.view.View.measure(View.java:18788)
                                                                              at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                              at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:389)
                                                                              at android.view.View.measure(View.java:18788)
                                                                              at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                              at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                              at android.view.View.measure(View.java:18788)
                                                                              at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                              at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                              at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                              at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                              at android.view.View.measure(View.java:18788)
                                                                              at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                                              at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                              at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
                                                                              at android.view.View.measure(View.java:18788)
                                                                              at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
                                                                              at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
                                                                              at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1508)
                                                                              at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                                              at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                                              at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                              at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                              at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                                              at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                                              at android.os.Handler.handleCallback(Handler.java:739)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是FeedItem

public class FeedItem {
private int id;
private String name, status, image, profilePic, timeStamp, url;

public FeedItem() {
}

public FeedItem(int id, String name, String image, String status,
                String profilePic, String timeStamp, String url) {
    super();
    this.id = id;
    this.name = name;
    this.image = image;
    this.status = status;
    this.profilePic = profilePic;
    this.timeStamp = timeStamp;
    this.url = url;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getImge() {
    return image;
}

public void setImge(String image) {
    this.image = image;
}

public String getStatus() {
    return status;
}

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

public String getProfilePic() {
    return profilePic;
}

public void setProfilePic(String profilePic) {
    this.profilePic = profilePic;
}

public String getTimeStamp() {
    return timeStamp;
}

public void setTimeStamp(String timeStamp) {
    this.timeStamp = timeStamp;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

我不知道为什么会返回null。如果我将它转换为活动,Feed Fragment工作正常。但在一个片段中它不起作用。 任何人都可以向我解释一下,

是的,我知道它是一个空指针异常。但是在哪里创建零点?

0 个答案:

没有答案