2013-02-28 3 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); 

Я пытался бросить список с String, массив, используя 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 реализует List, который реализует коллекцию, так что именно проблема с литьем здесь?

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

+0

Трассировка стека приводит к последней строке верхнего фрагмента кода, где выполняется команда запрос. Трассировка стека заканчивается срединным фрагментом кода, где BestMatchSpecFactory пытается передать параметр в коллекцию. –

ответ

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

Я пробовал это и все еще получаю то же исключение. –

+0

Затем вставьте полный код, в котором происходит исключение. Я предполагаю, что в другом месте проблема может возникнуть. –

+0

Хммм ... В самом деле я не могу вставить. Первая строка фрагмента выше - это начало метода (буквально, прямо под подписью), а последняя строка - это трассировка стека. Трассировка стека заканчивается в строке I, вставленной из BestMatchSpecFactory.java. Между прочими вызовами, которые он делает в других пакетах, например AbstractHttpClient, BasicHttpProcessor и т. Д., Нет недостающих строк. Нужно ли мне также искать эти методы и вставлять их? –

0

на самом деле, это должно быть

client.getParams().setParameter(CookieSpecPNames.DATE_PATTERNS, new String[] { ... }); 
Смежные вопросы