2015-01-10 16 views
0

我有一个奇怪的问题。我一直在使用robopsice工作一个月左右,工作得很好,但今天午餐回来后,我的SpiceRequest的loadDataFromNetwork停止了调用。我认为这不是应用程序代码的问题,但我不确定是否需要查看。我的SQL API运行良好,并在浏览器中工作。下面是我得到的错误,SpiceRequest和活动称之为:Robospice loadDataFromNetwork()not firing

01-10 01:04:22.873: D//SpiceManager.java:281(2241): 01:04:22.873 SpiceManagerThread 0 Sending request to service : CachedSpiceRequest 
01-10 01:04:22.874: D//RequestProcessor.java:66(2241): 01:04:22.874 SpiceManagerThread 0 Adding request to queue 151426252: CachedSpiceRequest [[email protected], cacheDuration=60000, [email protected]] size is 0 
01-10 01:04:22.874: D//RequestProcessor.java:85(2241): 01:04:22.874 SpiceManagerThread 0 Adding entry for type class com.example.model.UserSession and cacheKey [email protected] 
01-10 01:04:22.875: D//RequestProgressManager.java:61(2241): 01:04:22.875 SpiceManagerThread 0 Request was added to queue. 
01-10 01:04:22.875: D//SpiceServiceListenerNotifier.java:146(2241): 01:04:22.875 SpiceManagerThread 0 Message queue is Handler (android.os.Handler) {2234a2ce} 
01-10 01:04:22.875: D//RequestProgressManager.java:82(2241): 01:04:22.875 SpiceManagerThread 0 Sending progress PENDING 
01-10 01:04:22.876: D//SpiceServiceListenerNotifier.java:146(2241): 01:04:22.876 SpiceManagerThread 0 Message queue is Handler (android.os.Handler) {2234a2ce} 
01-10 01:04:22.876: D//SpiceServiceListenerNotifier.java:175(2241): 01:04:22.876 main Processing request added: CachedSpiceRequest [[email protected], cacheDuration=60000, [email protected]] 
01-10 01:04:22.877: V//SpiceService.java:442(2241): 01:04:22.877 SpiceManagerThread 0 Pending requests : 1 
01-10 01:04:22.881: V//SpiceService.java:444(2241): 01:04:22.881 SpiceManagerThread 0 Stop foreground 
01-10 01:04:22.883: D//DefaultRequestRunner.java:83(2241): 01:04:22.882 Thread-222 Processing request : CachedSpiceRequest [[email protected], cacheDuration=60000, [email protected]] 
01-10 01:04:22.883: D//DefaultRequestRunner.java:97(2241): 01:04:22.883 Thread-222 Loading request from cache : CachedSpiceRequest [[email protected], cacheDuration=60000, [email protected]] 
01-10 01:04:22.883: D//RequestProgressManager.java:82(2241): 01:04:22.883 Thread-222 Sending progress READING_FROM_CACHE 
01-10 01:04:22.884: D//SpiceServiceListenerNotifier.java:146(2241): 01:04:22.884 Thread-222 Message queue is Handler (android.os.Handler) {2234a2ce} 
01-10 01:04:22.885: D//DefaultRequestRunner.java:129(2241): 01:04:22.885 Thread-222 Cache content not available or expired or disabled 
01-10 01:04:22.886: E//DefaultRequestRunner.java:131(2241): 01:04:22.886 Thread-222 Network is down. 
01-10 01:04:22.887: D//DefaultRequestRunner.java:294(2241): 01:04:22.887 Thread-222 It tooks 04 ms to process request CachedSpiceRequest [[email protected], cacheDuration=60000, [email protected]]. 

我SpiceRequest类

public class SessionRequest extends SpringAndroidSpiceRequest<UserSession> 
{ 
    public enum OPERATION {LOGIN,LOGOUT,SIGNUP}; 

    private User user = new User(); 
    private boolean operation; 
    private String token; 
    OPERATION op = null; 
    Session toSend = new Session(); 
    Config config = new Config(); 
    public SessionRequest(Session s,String tok, OPERATION op) 
    { 
     super(UserSession.class); 
     toSend = s; 
     this.token = tok; 
     this.op = op; 
    } 

    @Override 
    public UserSession loadDataFromNetwork() throws Exception 
    { 
     HttpHeaders headers = new HttpHeaders(); 
     RestTemplate restTemplate = new RestTemplate(); 
     restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
     ResponseEntity<UserSession> response = null; 
     HttpEntity<?> postEntity; 
     switch(op) 
     { 
      case SIGNUP: 
       try{ 
        User send = new User(); 
        send.setUsername(toSend.getEmail()); 
        send.setPassword(toSend.getPassword()); 
        send.setPasswordConfirmation(toSend.getPasswordConfirmation()); 
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
        //MultiValueMap<String, User> body = new LinkedMultiValueMap<String, User>(); 
        //body.add("user", send); 
        postEntity = new HttpEntity<Object>(send,headers); 
        Log.i("Request", new Gson().toJson(postEntity.getBody())); 
        response = restTemplate.exchange(config.WEB_SERVICE_URL + "https://stackoverflow.com/users/", HttpMethod.POST,postEntity,UserSession.class); 
        Log.i("Response", new Gson().toJson(response)); 
      } 
      catch (RestClientException e) { 
       Log.d("REST", ((HttpStatusCodeException)e).getResponseBodyAsString()); 
      } 
      break; 


      case LOGIN: 
       restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
       postEntity = new HttpEntity<Object>(toSend,headers); 
       response = restTemplate.exchange(config.WEB_SERVICE_URL + "/sessions/", HttpMethod.POST,postEntity,UserSession.class); 
       Log.d("Response", new Gson().toJson(response)); 
       break; 

      case LOGOUT: 
       headers.add("Authorization", "Token token=" +token); 
       restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
       HttpEntity<?> deleteEntity = new HttpEntity<Object>(headers); 
       response = restTemplate.exchange(config.WEB_SERVICE_URL+ "sessions/" + token, HttpMethod.DELETE,deleteEntity,UserSession.class); 
       return(null); 

     } 

     UserSession resp = response.getBody(); 
     Log.d("request","connected"); 
     return (resp); 
    } 

    /** 
    * This method generates a unique cache key for this request. In this case 
    * our cache key depends just on the keyword. 
    * @return 
    */ 
    public String createCacheKey() { 
     return "followers." + user; 
    } 
} 

从活动执行请求的块:

private void performRequest() 
    { 
     SessionRequest request = new SessionRequest (getCurrentSession(),"",SessionRequest.OPERATION.LOGIN); 
     lastRequestCacheKey = request.createCacheKey(); 
     spiceManager.execute(request, lastRequestCacheKey, DurationInMillis.ONE_MINUTE, new UserRequestListener()); 
    } 

    public void callPerformRequest(){ 
     performRequest(); 
    } 

@Override 
protected void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    if (savedInstanceState.containsKey(KEY_LAST_REQUEST_CACHE_KEY)) { 
     lastRequestCacheKey = savedInstanceState 
      .getString(KEY_LAST_REQUEST_CACHE_KEY); 
     spiceManager.addListenerIfPending(UserSession.class, 
      lastRequestCacheKey, new UserRequestListener()); 
     spiceManager.getFromCache(UserSession.class, 
      lastRequestCacheKey, DurationInMillis.ONE_MINUTE, 
      new UserRequestListener()); 
    } 

} 



private class UserRequestListener implements RequestListener <UserSession> 
{ 
    @Override 
    public void onRequestFailure(SpiceException e) 
    { 
     TextView error = (TextView) findViewById(R.id.errorText); 
     error.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/MYRIADPRO-REGULAR.OTF")); 
     error.setText("Invalid Username or Password"); 

    } 

    @Override 
    public void onRequestSuccess (UserSession returnedSession) 
    { 
     if (returnedSession == null) 
     { 
      return; 
     } 
     returnedSession.getUser().setToken(returnedSession.getSession().getAuthToken()); 
     Bundle b = new Bundle(); 
     b.putParcelable("user", returnedSession.getUser()); 
     Intent i = new Intent (MainActivity.this,Dashboard.class); 
     i.putExtras(b); 
     startActivity(i); 
    } 
} 

}

从调试我可以看到我们构造的请求和执行调用是到达但loadDataFromNetwork()方法不会触发,并在一会儿之后,它会去onRequestFailure。这可能是我的RoboSpice jar的问题吗?这真的很奇怪,它会突然停止工作。我什至尝试重新启动我的电脑。我唯一能想到的其他事情可能是缓存以某种方式阻止它。任何帮助表示赞赏!

感谢

回答

1

你的日志说

01-10 01:04:22.886: E//DefaultRequestRunner.java:131(2241): 01:04:22.886 Thread-222 Network is down. 

检查,如果你的设备处于联机状态。