我的对象不为null,但是得到了NULL POINTER EXCEPTION [英] My object is not null but I'm getting a NULL POINTER EXCEPTION

查看:153
本文介绍了我的对象不为null,但是得到了NULL POINTER EXCEPTION的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于某种原因,当 videosFound 确实不为空时,我得到了一个空指针异常.即使传入的参数 adapter 也不为空.我只是通过打印出是否为null(两者都不为null)来检查并验证这一点.所以有人可以告诉我我怎么得到这个错误吗?

For some reason I am getting a null pointer exception pointing to videosFound when it is indeed not null. Even the parameter, adapter, that is being passed in is not null. I check and verify this simply by printing out if its null or not (both of them are NOT null). So can someone please tell me how I am getting this error?

private ListView videosFound; 

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);

        searchInput = (EditText)findViewById(R.id.search_input);
        videosFound = (ListView)findViewById(R.id.videos_found);

        handler = new Handler();

        addClickListener();

        searchInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    searchOnYoutube(v.getText().toString());
                    return false;
                }
                return true;
            }
        });
    }

   private void updateVideosFound(){
        ArrayAdapter<VideoItem> adapter = new ArrayAdapter<VideoItem>(getApplicationContext(), R.layout.video_item, searchResults){
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                if(convertView == null){
                    convertView = getLayoutInflater().inflate(R.layout.video_item, parent, false);
                }
                ImageView thumbnail = (ImageView)convertView.findViewById(R.id.video_thumbnail);
                TextView title = (TextView)convertView.findViewById(R.id.video_title);
                TextView description = (TextView)convertView.findViewById(R.id.video_description);

                VideoItem searchResult = searchResults.get(position);

                Picasso.with(getApplicationContext()).load(searchResult.getThumbnailURL()).into(thumbnail);
                title.setText(searchResult.getTitle());
                description.setText(searchResult.getDescription());
                return convertView;
            }
        };
        if(videosFound == null){
            System.out.println("videoFound is null***********");
        }else{
            System.out.println("videoFound is NOT null***********");
        }

        if(adapter == null){
            System.out.println("adapter is null***********");
        }else{
            System.out.println("adapter is NOT null***********");
        }
        videosFound.setAdapter(adapter);//ERROR HERE. neither videosFound no adapter are null
    }

private void addClickListener(){
        videosFound.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> av, View v, int pos,
                                    long id) {
                Intent intent = new Intent(getApplicationContext(), PlayerActivity.class);
                intent.putExtra("VIDEO_ID", searchResults.get(pos).getId());
                startActivity(intent);
            }
        });
    }

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/search"
        android:id="@+id/search_input"
        android:singleLine="true" />

    <ListView
        android:id="@+id/videos_found"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:dividerHeight="5dp" />

</LinearLayout>

控制台:

03-24 18:04:31.833 17014-17440/com.example.shawn.myyoutube D/YC: Could not search: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
                                                                 {
                                                                   "code" : 403,
                                                                   "errors" : [ {
                                                                     "domain" : "usageLimits",
                                                                     "message" : "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed.",
                                                                     "reason" : "ipRefererBlocked",
                                                                     "extendedHelp" : "https://console.developers.google.com"
                                                                   } ],
                                                                   "message" : "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed."
                                                                 }
03-24 18:04:31.833 17014-17014/com.example.shawn.myyoutube I/System.out: videoFound is NOT null***********
03-24 18:04:31.833 17014-17014/com.example.shawn.myyoutube I/System.out: adapter is NOT null***********
03-24 18:04:31.843 17014-17014/com.example.shawn.myyoutube D/AndroidRuntime: Shutting down VM
03-24 18:04:31.843 17014-17014/com.example.shawn.myyoutube E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.example.shawn.myyoutube, PID: 17014
                                                                             java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
                                                                                 at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
                                                                                 at android.widget.ListView.setAdapter(ListView.java:502)
                                                                                 at com.example.shawn.myyoutube.SearchActivity.updateVideosFound(SearchActivity.java:98)
                                                                                 at com.example.shawn.myyoutube.SearchActivity.access$200(SearchActivity.java:23)
                                                                                 at com.example.shawn.myyoutube.SearchActivity$2$1.run(SearchActivity.java:61)
                                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:145)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5951)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

推荐答案

在堆栈跟踪中,我看到以下内容:

In the stacktrace I see this:

java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

适配器试图在空的List上调用size().确保您的列表searchResults不为空.

The adapter is trying to call size() on a null List. Make sure your list searchResults is not null.

这篇关于我的对象不为null,但是得到了NULL POINTER EXCEPTION的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆