2012-12-25 29 views
1

我正在尝试使用适用于Android和Robospice的Spring获取图像。根据GitHub上的各种示例,我使用createRestTemplate方法设置了我的SpiceService,并且这是我设置了标头。我还设置了Gson,Form和StringHttp消息转换器。尝试获取图像时出现错误标题

这个设置工作得很好,当只有普通的JSON,但是当我试图获取图像的头部设置为一些默认值,这意味着我失去了我的身份验证头,请求失败。

我也尝试在请求本身内设置一个新的resttemplate。

我在这里错过了什么。

编辑: 用于下载一个JSON的请求:

public class GetMeRequest extends SpringAndroidSpiceRequest<User> { 
public static final String TAG = "GetMeRequest"; 

public GetMeRequest() { 
    super(User.class); 
} 

@Override 
public User loadDataFromNetwork() throws Exception { 
    Log.d(TAG, "================loading from network"); 
    ResponseObject response = getRestTemplate().getForObject(ApiCalls.USERS_ME_URI, ResponseObject.class); 

    Log.d(TAG, response.toString()); 
    if(!response.data.users.isEmpty() && response.data.users != null){ 
     return response.data.users.get(0); 
    } 
    return null; 
    } 
} 

图像请求是这样的,基本上一个BigBinaryRequest

public class ImageRequest extends SpringAndroidSpiceRequest<InputStream> { 
protected String url; 
protected File cacheFile; 
protected String auth; 

public ImageRequest(String url, File cacheFile, String auth) { 
    super(InputStream.class); 
    this.url = url; 
    this.cacheFile = cacheFile; 
    this.auth = auth; 
} 

@Override 
public InputStream loadDataFromNetwork() throws Exception { 
    try { 
     java.io.InputStream is = new URL(url).openStream(); 
     // touch 
     cacheFile.setLastModified(System.currentTimeMillis()); 

     FileOutputStream fileOutputStream = new FileOutputStream(cacheFile); 
     Utils.copyLargeFile(is, fileOutputStream); 
     return new FileInputStream(cacheFile); 
    } catch (MalformedURLException e) { 
     Log.e(getClass().getName(), "Unable to create image URL", e); 
     return null; 
    } catch (IOException e) { 
     Log.e(getClass().getName(), "Unable to download image", e); 
     return null; 
    } 
} 
} 

现在看着两个我看到了我使用getRestTemplate方法可能会用我的标题获取RestTemplate。这可能是问题,但有人可以给我一个关于如何进行的提示吗?

EDIT2: 从我SpiceService的createRestTemplate方法

@Override 
public RestTemplate createRestTemplate() { 
    RestTemplate restTemplate = new RestTemplate() { 
     @Override 
     protected ClientHttpRequest createRequest(URI url, HttpMethod method) throws IOException { 
      ClientHttpRequest request = super.createRequest(url, method); 
      HttpHeaders headers = request.getHeaders(); 
      headers.setAcceptEncoding(ContentCodingType.GZIP); 
      headers.set("Accept", "*/*"); 
      headers.setUserAgent(P1Application.USER_AGENT); 
      headers.setContentType(new MediaType("application","json")); 
      headers.set("Authorization", ((P1Application)getApplication()).getAuth()); 
      return request; 
     } 
    }; 


    // set timeout for requests 
    ClientHttpRequestFactory factory = restTemplate.getRequestFactory(); 
    if (factory instanceof HttpComponentsClientHttpRequestFactory) { 
     HttpComponentsClientHttpRequestFactory advancedFactory = (HttpComponentsClientHttpRequestFactory) factory; 
     advancedFactory.setConnectTimeout(TIMEOUT); 
     advancedFactory.setReadTimeout(TIMEOUT); 
    } else if (factory instanceof SimpleClientHttpRequestFactory) { 
     SimpleClientHttpRequestFactory advancedFactory = (SimpleClientHttpRequestFactory) factory; 
     advancedFactory.setConnectTimeout(TIMEOUT); 
     advancedFactory.setReadTimeout(TIMEOUT); 
    } 

    GsonHttpMessageConverter jsonConverter = new GsonHttpMessageConverter(); 
    FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter(); 
    StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); 
    final List< HttpMessageConverter<?>> listHttpMessageConverters = restTemplate.getMessageConverters(); 

    listHttpMessageConverters.add(jsonConverter); 
    listHttpMessageConverters.add(formHttpMessageConverter); 
    listHttpMessageConverters.add(stringHttpMessageConverter); 
    restTemplate.setMessageConverters(listHttpMessageConverters); 
    return restTemplate; 
} 
+1

我不知道。我们缺少的是代码。 –

+0

@Marcel愚蠢的我......我只是假设这里的每个人都是精神病患者。添加了两个Request类的代码。第一个按预期工作,使用正确的标题,第二个使用默认标题集发送 – Qw4z1

+0

关于你的代码有几件事我不明白(我猜也不需要)。但是,最大的问题是你为什么不使用'RestTemplate'来检索你的图像?这工作得很好:http://blog.springsource.org/2009/03/27/rest-in-spring-3-resttemplate/ - >“检索照片”或https://jira.springsource.org/browse/SPR-7357 –

回答