program story

Android의 ContentResolver.query ()가 null을 반환하는 원인은 무엇입니까?

inputbox 2020. 12. 31. 08:15
반응형

Android의 ContentResolver.query ()가 null을 반환하는 원인은 무엇입니까?


ContentResolver.query () 는 어떤 조건 에서 커서 객체 대신 null을 반환합니까? 전에 빈 커서를 받았지만 메서드가 null을 반환 할 수도 있다는 것을 깨달았습니다. 하지만 이런 일이 일어나는 상황을 추적 할 수는 없었습니다.


나는 오늘 내 앱에 대해받은 사용자 충돌 보고서로 인해 동일한 문제를 우연히 발견했습니다. Android 문서가 명확하지 않은 경우 소스 코드를 보는 데 도움이됩니다. 이것이 내가 ContentResolver.query()반환 원인에 대해 찾은 것입니다 null.

  1. 콘텐츠 제공 업체를 가져올 수 없습니다. 이는 지정된에 문제가 Uri있거나 단순히 시스템에 존재하지 않기 때문일 수 있습니다. Uri가 문제인 경우 원인은 다음과 같습니다. 프로토콜이 없거나 content://Uri에 권한 문자열 부분이 없습니다 (Uri.getAuthority () == null).

  2. 획득 한 공급자의 쿼리 메서드 자체는 null.

  3. 콘텐츠 공급자를 가져올 수 있지만 쿼리 중에 RemoteException 이 발생했습니다.

특히 (2.) 때문에 null정의 된 규칙이 없기 때문에 그 결과 원인이 될 수있는 것은 거의 임의적 입니다. 그러나 일반적으로 SQLite가의 백엔드 인 ContentProvider경우 결과로 null.

Android 시스템 ContentProvider은 무언가를 반환하기 전에 몇 가지 검사를 수행합니다. 입력이 예상과 다르면 null반환 될 가능성이 희박 합니다. 하지만 솔직히 말해서 나에게는 그런 일이 없었습니다. 나는 일반적으로 IllegalArgumentException쿼리 매개 변수 문제의 경우를 얻습니다 . null빈 결과 집합의 경우 일부 ContentProvider 구현이 반환 될 수 있습니다.

어느 쪽이든. 항상 null을 확인 해야 할 것 같습니다 . 특히 이유 번호 (3.)는 모든 Android 기기에서 발생할 수있는 일입니다.


ContentResolver.queryuri 체계가 형식이 아니 content://거나 contentProvider체계 자체가 존재하지 않는 경우 null을 반환 합니다.


ContentResolver.query ()는 다음과 같은 경우 null을 반환합니다.

  1. 데이터베이스에 존재하지 않는 열 이름을 전달하려는 경우 (매우 일반적인 경우는 개발자가 열과 비슷해 보이므로 상수를 열 이름으로 사용하는 경우입니다).

  2. URI 인수가 유효하지 않기 때문에 null 일 수 있습니다.

null을 반환하는 다른 경우가있을 수 있습니다. 그러나 위의 두 가지 경우는 개발자가 머리카락을 당기는 매우 일반적인 이유입니다. :)


나는 같은 문제가 있었다. 내 버그는 공급자의 커서를 닫지 않았으므로 나중에 쿼리 호출이 null로 이어집니다.


매니페스트에서 공급자를 선언하는 것을 잊은 경우 쿼리가 null을 반환 할 수 있습니다.


결과가 없으면 null을 반환합니다. 주어진 데이터베이스 쿼리가 아무 것도 (단일 데이터 행도 아님) 결과가 없으면 query ()는 null을 반환합니다.

참조 URL : https://stackoverflow.com/questions/13080540/what-causes-androids-contentresolver-query-to-return-null

반응형