导致:java.lang.IllegalArgumentException:错误的类:类java.lang.String

问题描述:

我想格式化日期,我从我的数据库表中检索,我想格式从“2015 02 11 12 00”到“ 2月2日“,但它格式化时会出错。有没有其他的方式来格式化这些日期?导致:java.lang.IllegalArgumentException:错误的类:类java.lang.String

继代码:

protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_all_events, "GET", params); 

     // Check your log cat for JSON reponse 
     Log.d("All events: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // events found 
       // Getting Array of events 
       events = json.getJSONArray(TAG_EVENTS); 

       // looping through All events 
       for (int i = 0; i < events.length(); i++) { 
        JSONObject c = events.getJSONObject(i); 

        // Storing each json item in variable 
        String id = c.getString(TAG_PID); 
        String eventname = c.getString(TAG_EVENTNAME); 
        String eventstart = c.getString(TAG_EVENTSTART); 

        String eventstartconvert = formatdate.format(eventstart); //this line gives an error. 


        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        map.put(TAG_PID, id); 
        map.put(TAG_EVENTNAME, eventname); 
        map.put(TAG_EVENTSTART,eventstartconvert); 

        // adding HashList to ArrayList 
        eventsList.add(map); 
       } 
      } 

这里是我的logcat:

02-11 09:14:40.997 25966-26198/com.example.jithea.testlogin E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2 
java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:299) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
     at java.lang.Thread.run(Thread.java:838) 
Caused by: java.lang.IllegalArgumentException: Bad class: class java.lang.String 
     at java.text.DateFormat.format(DateFormat.java:359) 
     at java.text.Format.format(Format.java:93) 
     at com.example.jithea.testlogin.EventsActivity$LoadAllevents.doInBackground(EventsActivity.java:137) 
     at com.example.jithea.testlogin.EventsActivity$LoadAllevents.doInBackground(EventsActivity.java:91) 
     at android.os.AsyncTask$2.call(AsyncTask.java:287) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:234) 

在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230) 在java.util中。 concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573) 在java.lang.Thread.run(Thread.java:838)

+1

请张贴异常的完整堆栈跟踪,使我们知道要启动的线看。 – emerssso 2015-02-11 01:25:28

你可能在你这个格式,日期格式化.......

DateFormat inputFormatter1 = new SimpleDateFormat("yyyy-MM-dd"); 
Date date1 = inputFormatter1.parse("2015-2-22"); 

DateFormat outputFormatter1 = new SimpleDateFormat("dd-MMM-yyyy"); 
String output1 = outputFormatter1.format(date1); // 

//如果以这种格式输入是2015年2月22日比出认沽将是2月22日 - 2015年

+0

您可以根据您的设置格式要求.... like(“yyyy-MM-dd hh:mm:ss”) – 2015-02-11 02:57:55

+0

它的工作原理!谢谢.. – 2015-02-11 03:36:42

DateFormat.format预计NumberDate但你传递一个String。你可能想parse the string,但格式化它只会产生你将解析的相同的字符串。

+0

'错误:(138,31)错误:找不到格式合适的方法(SimpleDateFormat,String)'按照我声明的方式'SimpleDateFormat formatdate = new SimpleDateFormat(“Mmm dd”);' – 2015-02-11 01:33:37

您应该格式的输入,然后传递到输出格式

try { 
    String formattedString = new SimpleDateFormat("dd MMM yyyy").format(new SimpleDateFormat("yyyy-MM-dd").parse("2014-07-31")); 
} catch (ParseException e) { 
    e.printStackTrace(); 
}