首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Robospice ()未触发

Robospice ()未触发
EN

Stack Overflow用户
提问于 2015-01-10 09:14:57
回答 1查看 594关注 0票数 0

我有个奇怪的问题。我已经使用robopsice大约一个月了,它工作得很好,但是今天吃完午饭回来后,我的SpiceRequest的loadDataFromNetwork停止了调用。我不认为这是应用程序代码的问题,但我不确定其他人是否可以查看。我的sql api运行良好,并且可以在浏览器中正常工作。下面是我得到的错误,SpiceRequest和调用它的活动:

代码语言:javascript
复制
    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].

我的SpiceRequest类

代码语言:javascript
复制
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;
    }
}

来自执行请求的活动的块:

代码语言:javascript
复制
 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);
    }
}

}

通过调试,我可以看到我们构造了请求,并且到达了execute调用,但是loadDataFromNetwork()方法没有触发,过了一会儿它就转到了onRequestFailure。这可能是我的RoboSpice jar有问题吗?这真的很奇怪,它会突然停止工作。我甚至试着重启我的电脑。我唯一能想到的另一件事是,也许缓存以某种方式阻止了它。如有任何帮助,我们不胜感激!

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-01-12 20:44:07

你的日志上说

代码语言:javascript
复制
01-10 01:04:22.886: E//DefaultRequestRunner.java:131(2241): 01:04:22.886 Thread-222 Network is down.

检查您的设备是否联机。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27871809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档