Robospice loadDataFromNetwork()未触发

时间:2015-01-10 01:14:57

标签: android spring robospice

我有一个奇怪的问题。我一直在使用robopsice一个月左右,它工作得很好,但今天从午餐回来后,我的SpiceRequest的loadDataFromNetwork停止了调用。我不认为这是应用程序代码的问题,但我不确定还有其他问题。我的sql api运行正常,可以在浏览器中运行。这是我得到的错误,SpiceRequest和调用它的活动:

    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 [requestCacheKey=followers.com.example.model.User@1f0803c, cacheDuration=60000, spiceRequest=com.example.jobpool.SessionRequest@3aebb315] 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 followers.com.example.model.User@1f0803c.
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 [requestCacheKey=followers.com.example.model.User@1f0803c, cacheDuration=60000, spiceRequest=com.example.jobpool.SessionRequest@3aebb315]
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 [requestCacheKey=followers.com.example.model.User@1f0803c, cacheDuration=60000, spiceRequest=com.example.jobpool.SessionRequest@3aebb315]
01-10 01:04:22.883: D//DefaultRequestRunner.java:97(2241): 01:04:22.883 Thread-222 Loading request from cache : CachedSpiceRequest [requestCacheKey=followers.com.example.model.User@1f0803c, cacheDuration=60000, spiceRequest=com.example.jobpool.SessionRequest@3aebb315]
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 [requestCacheKey=followers.com.example.model.User@1f0803c, cacheDuration=60000, spiceRequest=com.example.jobpool.SessionRequest@3aebb315].

My 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 + "/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 个答案:

答案 0 :(得分:1)

你的日志说

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

检查您的设备是否在线。