gpt4 book ai didi

android - 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?

转载 作者:可可西里 更新时间:2023-11-01 18:59:05 25 4
gpt4 key购买 nike

我正在编写一个使用 RoboSpice 的应用程序。在请求监听器 onRequestFailure( SpiceException arg0 ) 中,有没有办法确定该错误是 401 HTTP 错误的结果?

我有一个后端服务,当 token 过期时返回 401 错误,当这种情况发生时我需要提示用户重新输入他们的凭据。

有没有办法知 Prop 体发生了 401 HTTP 错误?

以下是我的请求示例。

   public class LookupRequest extends SpringAndroidSpiceRequest <Product> {

public String searchText;
public String searchMode;

public LookupRequest() {
super( Product.class );
}

@Override
public Product loadDataFromNetwork() throws Exception {
String url = String.format("%s/Lookup?s=%s&m=%s", Constants.BASE_URL, searchText, searchMode);
Ln.d("Calling URL: %s", url);
return getRestTemplate().getForObject(url, Product.class );
}

最佳答案

我仔细查看了 Spring-Android,似乎 getRestTemplate().getForObject(...) 在发生 401 或任何网络错误时抛出 HttpClientErrorException。

查看 Robo Spice 在何处捕获该异常,我发现它们在 processRequest 函数的 RequestProcessor.java 中捕获了它。他们将 Spring-Android 异常作为从 Java 异常类继承的 SpiceException 中的 throwable 传入。

所以您只需在 RoboSpice RequestListener 中执行以下操作,看看它是否是 401 UNAUTHORIZED 异常。

    private class MyRequestListener implements RequestListener<RESULT> {

public void onRequestFailure( SpiceException arg0 ) {

if(arg0.getCause() instanceof HttpClientErrorException)
{
HttpClientErrorException exception = (HttpClientErrorException)arg0.getCause();
if(exception.getStatusCode().equals(HttpStatus.UNAUTHORIZED))
{
Ln.d("401 ERROR");
}
else
{
Ln.d("Other Network exception");
}
}
else if(arg0 instanceof RequestCancelledException)
{
Ln.d("Cancelled");
}
else
{
Ln.d("Other exception");
}
};

public void onRequestSuccess( RESULT result ) {
Ln.d("Successful request");
}
}

关于android - 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com