2013-02-28 104 views
0

相关的代码片段:BasicHttpParams - 添加日期格式(抛出ClassCastException)

BasicHttpParams params = new BasicHttpParams(); 
Object dateFormats = "E, dd-MMM-yyyy HH:mm:ss zzz"; 
List<Object> dateFormatList = new ArrayList<Object>(); 

dateFormatList.add(dateFormats); 

params.setParameter(CookieSpecPNames.DATE_PATTERNS, dateFormatList); 

HttpClient client = new DefaultHttpClient(params); 
HttpGet httpGet = new HttpGet("http://twitter.com/statuses/user_timeline/sample_user.json"); 

try { 
    HttpResponse response = client.execute(httpGet); 

我试过用字符串,数组转换列表,在一个字符串数组使用Arrays.asList,尽我所能考虑到。但每次我都会得到如下的ClassCastException。我已经通过源代码和发生异常的行,BestMatchSpecFactory使用getParameter()来检索CookieSpecPNames.DATE_PATTERNS中的参数集(这应该是我的列表<>)并将其保存到集合中。

下面是BestMatchSpecFactory.java在org.apache.http.impl.cookie代码在第49行:

Collection<?> param = (Collection<?>) params.getParameter(CookieSpecPNames.DATE_PATTERNS); 

的ArrayList实现它实现了采集,那么究竟什么是铸造这里的问题列表?

02-28 10:09:29.117: W/System.err(1222): java.lang.ClassCastException: java.util.ArrayList 
02-28 10:09:29.137: W/System.err(1222):  at org.apache.http.impl.cookie.BestMatchSpecFactory.newInstance(BestMatchSpecFactory.java:49) 
02-28 10:09:29.137: W/System.err(1222):  at org.apache.http.cookie.CookieSpecRegistry.getCookieSpec(CookieSpecRegistry.java:113) 
02-28 10:09:29.137: W/System.err(1222):  at org.apache.http.client.protocol.RequestAddCookies.process(RequestAddCookies.java:147) 
02-28 10:09:29.147: W/System.err(1222):  at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290) 
02-28 10:09:29.147: W/System.err(1222):  at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160) 
02-28 10:09:29.167: W/System.err(1222):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401) 
02-28 10:09:29.167: W/System.err(1222):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
02-28 10:09:29.181: W/System.err(1222):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
02-28 10:09:29.181: W/System.err(1222):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
02-28 10:09:29.181: W/System.err(1222):  at com.duderlabs.candr.MainActivity.readTwitterFeed(MainActivity.java:80) 
02-28 10:09:29.181: W/System.err(1222):  at com.duderlabs.candr.MainActivity.onCreate(MainActivity.java:39) 
02-28 10:09:29.189: W/System.err(1222):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-28 10:09:29.217: W/System.err(1222):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
02-28 10:09:29.217: W/System.err(1222):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
02-28 10:09:29.217: W/System.err(1222):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-28 10:09:29.217: W/System.err(1222):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-28 10:09:29.238: W/System.err(1222):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-28 10:09:29.238: W/System.err(1222):  at android.os.Looper.loop(Looper.java:123) 
02-28 10:09:29.258: W/System.err(1222):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-28 10:09:29.258: W/System.err(1222):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-28 10:09:29.258: W/System.err(1222):  at java.lang.reflect.Method.invoke(Method.java:507) 
02-28 10:09:29.258: W/System.err(1222):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-28 10:09:29.258: W/System.err(1222):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-28 10:09:29.258: W/System.err(1222):  at dalvik.system.NativeStart.main(Native Method) 

UPDATE

我已经更新了基于下面的答案代码:

BasicHttpParams params = new BasicHttpParams(); 
String dateFormat = "E, dd-MMM-yyyy HH:mm:ss zzz"; 
Collection<String> dateFormatList = new ArrayList<String>(); 

dateFormatList.add(dateFormat); 

params.setParameter(CookieSpecPNames.DATE_PATTERNS, dateFormatList); 

HttpClient client = new DefaultHttpClient(params); 
HttpGet httpGet = new HttpGet("http://twitter.com/statuses/user_timeline/sample_user.json"); 

try { 
    HttpResponse response = client.execute(httpGet); 

但仍然得到同样的异常。

+0

乌尔缺少一些代码行中,你有问题 - 请修改后 – user1428716 2013-02-28 19:05:25

+0

堆栈跟踪引回顶段的最后一行,在那里执行请求。堆栈跟踪结束于中间代码片段,其中BestMatchSpecFactory尝试将该参数强制转换为Collection。 – 2013-02-28 21:38:58

回答

1

按照Spec,这是你应该如何注册CookieSpecPNames.DATE_PATTERNS(虽然你的代码是正确的):

BasicHttpParams params = new BasicHttpParams(); 
String dateFormats = "E, dd-MMM-yyyy HH:mm:ss zzz"; 
java.util.Collection<String> dateFormatList = new ArrayList<String>(); 

dateFormatList.add(dateFormats); 

params.setParameter(CookieSpecPNames.DATE_PATTERNS, dateFormatList); 

对于调试,我还会尝试,看看是否

client.getParams().setParameter(CookieSpecPNames.DATE_PATTERNS, dateFormatList); 

原因ClassCastException。如果没有,那么你的params有问题。

+0

我试过这个,仍然得到相同的异常。 – 2013-02-28 22:31:52

+0

然后粘贴发生异常的完整代码。我假设问题可能在其他地方发生。 – 2013-03-01 07:55:53

+0

嗯......其实我没有其他东西可以粘贴。上面代码片段的第一行是方法的开始(字面上,正好在签名下),最后一行是堆栈跟踪的起始位置。堆栈跟踪结束于我从BestMatchSpecFactory.java粘贴的行。除了在诸如AbstractHttpClient,BasicHttpProcessor等其他软件包中所做的调用之外,它们之间没有缺失行。我是否还需要查找这些方法并粘贴它们? – 2013-03-01 20:54:52

0

实际上,它应该是

client.getParams().setParameter(CookieSpecPNames.DATE_PATTERNS, new String[] { ... });