1
votes

Now I know the problem but still no idea how to resolve it, the resquest is rejected by google instead of the fact that I renewed the key, and it was working before, now it gives me this error: ipRefererBlocked : "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." the list returned is null since the request is rejected.

******the Old issue*******

Im trying sice along time to create a youtube client app, but whenevr it is runned it stops with a NullPointerException. SearchActivity.java has fields that represent the views activity_search.xml. It also has a Handler to make updates on the user interface thread. In the onCreate method, we initialize the views and add an OnEditorActionListener to the EditText to know when the user has finished entering keywords. Im using my samsung S3 with a lollipop android, if that can make difference. Please help me out with this issue...

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:487)
at leader.org.sqwatch.SearchActivity.updateVideosFound(SearchActivity.java:99)
at leader.org.sqwatch.SearchActivity.access$200(SearchActivity.java:33)
at leader.org.sqwatch.SearchActivity$2$1.run(SearchActivity.java:72)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5256)
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:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

this is for the SearchActivity:

public class SearchActivity extends Activity {
    private EditText searchInput;
    private ListView videosFound;
    private Handler handler;
    private List<VideoItem> searchResults;

    @Override
    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();
        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 searchOnYoutube(final String keywords) {
        new Thread() {
            public void run() {
                YoutubeConnector yc = new YoutubeConnector(SearchActivity.this);
                searchResults = yc.search(keywords);
                handler.post(new Runnable() {
                    public void run() {
                        updateVideosFound();
                    }
                });
            }
        }.start();
    }

    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;
            }
        };
        videosFound.setAdapter(adapter);
    }

    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);
            }
        });
    }
}

And this is the activity_search.xml code:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:orientation="vertical" 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <EditText android:hint="@string/search" 
        android:id="@+id/search_input" 
        android:layout_height="wrap_content" 
        android:layout_width="match_parent"
        android:singleLine="true" 
        android:text="funny"/>
    <ListView android:dividerHeight="5dp" 
        android:id="@+id/videos_found" 
        android:layout_height="match_parent" 
        android:layout_width="match_parent"/>
</LinearLayout>
1
Use private List<VideoItem> searchResults=new List<VideoItem>(); instead of private List<VideoItem> searchResults;ρяσѕρєя K
Acually it cant be done since List is abstract and it cant be instanciatedLEADER
Hmm use List<String> searchResults=new ArrayList<String>();ρяσѕρєя K
Still the same bro, I think the method does not populate the list with the results, so its really nullLEADER
Actually the probleme is with api key, it gives me this restriction 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 allowedLEADER

1 Answers

0
votes

Acually I just remove all the allowed apps in the refers in google console I opened Api & auth/ Credentials and click "Edit allowed referers" empty the input field.

Thank you ρяσѕρєя K for your help