1

Я разрабатываю приложение для Android, которое использовало конечные точки google в качестве бэкэнд. По какой-то причине один из методов endpoints только когда-либо вызывает java.lang.NullPointerException при вызове от клиента android, но не при вызове из api explorer.Метод конечных точек Google всегда вызывает NullPointerException, почему?

Вот метод конечных точек:

@ApiMethod(name = "getFriends", path = "friends", httpMethod = ApiMethod.HttpMethod.GET) 
public List<Profile> getFriends(@Named("userId") String userId) { 
    Profile profile = ofy().load().key(Key.create(Profile.class, userId)).now(); 
    List<String> friendIds = profile.getFriendIds(); // NullPointerException on this line 
    List<Profile> friends = new ArrayList<>(); 
    if (friendIds != null) { 
     for (String friendId : friendIds) { 
      Profile friend = ofy().load().key(Key.create(Profile.class, friendId)).now(); 
      friends.add(friend); 
     } 
    } 
    return friends; 
} 

Вот это профиль сущности getFriendIds метод():

public List<String> getFriendIds() { 
    return friendIds != null ? ImmutableList.copyOf(friendIds) : null; 
} 

В режиме отладки и в API исследователя, все работает, как ожидалось. В этом примере я создал 2 пользователя, один с id = 4567, а другой id = 9876. Вот то, что случилось, когда я побежал метод, чтобы получить друзей:

enter image description here

Это работает, как ожидалось, и не вызывает никаких ошибок при вызове API проводника.

Затем я попробовал, когда пользователь не имеет друзей:

enter image description here

Это работает, как ожидалось, и не вызывает никаких ошибок при вызове API проводника.

В моем клиенте android я называю этот точный метод, но метод всегда вызывает java.lang.NullPointerException.

Я называю это из задачи асинхронном следующим образом:

return mApi.getFriends(mUserId).execute().getItems(); 

Вот StackTrace для клиентской стороны:

07-12 14:09:57.934 9777-9830/com.hb.birthpay W/System.err: com.google.api.client.googleapis.json.GoogleJsonResponseException: 503 Service Unavailable 
07-12 14:09:57.934 9777-9830/com.hb.birthpay W/System.err: { 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err: "code": 503, 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err: "errors": [ 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  { 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  "domain": "global", 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  "message": "java.lang.NullPointerException", 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  "reason": "backendError" 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  } 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err: ], 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err: "message": "java.lang.NullPointerException" 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err: } 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056) 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
07-12 14:09:57.935 9777-9830/com.hb.birthpay W/System.err:  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
07-12 14:09:57.936 9777-9830/com.hb.birthpay W/System.err:  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
07-12 14:09:57.936 9777-9830/com.hb.birthpay W/System.err:  at com.hb.birthpay.utils.EndpointTask$GetFriends$override.doInBackground(EndpointTask.java:101) 
07-12 14:09:57.936 9777-9830/com.hb.birthpay W/System.err:  at com.hb.birthpay.utils.EndpointTask$GetFriends$override.access$dispatch(EndpointTask.java) 
07-12 14:09:57.936 9777-9830/com.hb.birthpay W/System.err:  at com.hb.birthpay.utils.EndpointTask$GetFriends.doInBackground(EndpointTask.java:0) 
07-12 14:09:57.936 9777-9830/com.hb.birthpay W/System.err:  at com.hb.birthpay.utils.EndpointTask$GetFriends.doInBackground(EndpointTask.java:68) 

Вот является StackTrace для внутреннего интерфейса:

java.lang.NullPointerException 
    at com.hb.backend.spi.BirthpayEndpoint.getFriends(BirthpayEndpoint.java:75) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 

W Это происходит и как я могу это исправить?

ответ

0

NPE по-видимому, происходит от линии:

List<String> friendIds = profile.getFriendIds(); 

Это означает, что profile является null, что из этого кода будет происходить, если идентификатор пользователя не приводит к Profile объекта извлекается из хранилища данных , Что такое mUserId, установленное и действительно ли это ID на бэкэнде?

+0

Для аутентификации пользователей я использую firebase, которая возвращает токен, связанный с этим пользователем. Я сохраняю это в datastore google как идентификатор объектов профиля. @Larry Schiefer –

+0

Теперь проверьте, действительно ли mUserId является идентификатором в хранилище данных. @Larry Schiefer –

+0

Да, вы правы, mUserId = [email protected] при сохранении, но при вызове метода получения друзей mUserId = [email protected] –

Смежные вопросы