2013-04-11 27 views
0

util.concurrent.FutureTask.finishCompletion 當我嘗試打開內部存儲上的文件,我不知道如何處理,如果你有一些建議幫助我,請的AsyncTask用的readObject()

我的代碼:

 protected String doInBackground(Hashtable<String,String>... params) { 
     Hashtable ht=params[0]; 

     String json=HelperHttp.getJSONResponseFromURL(url, ht); 
     System.out.println(json); 

     try { 
      jObj = new JSONObject(json); 
       ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getCacheDir(),"")+"cacheFile.srl")); 
       out.writeObject(jObj.toString()); 
       out.close(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



     if(json!=null) {try { 
      ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(new File(getCacheDir(),"")+"cacheFile.srl"))); 
      JSONObject jsonObject; 
     try { 
      jsonObject = (JSONObject) in.readObject(); 
      JSONArray articles = jsonObject.getJSONArray("posts"); 

      for(int i = 0; i < articles.length(); i++){ 
        JSONObject c = articles.getJSONObject(i); 

        // Storing each json item in variable 
        AO=c.getJSONObject("post"); 


        String fr_titre = AO.getString("fr_titre"); 
        Log.d("hhhhhhhhhh", fr_titre); 

        lista.add(fr_titre); 

     } 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      in.close(); 


     } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ObjectStreamException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } else{ 
     return "Invalid Company Id"; 
     } 

     return "SUCCESS"; 
     } 

堆棧跟蹤:

04-11 11:52:04.694: E/AndroidRuntime(1026): FATAL EXCEPTION: AsyncTask #1 
04-11 11:52:04.694: E/AndroidRuntime(1026): java.lang.RuntimeException: An error occured while executing doInBackground() 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at java.lang.Thread.run(Thread.java:856) 
04-11 11:52:04.694: E/AndroidRuntime(1026): Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.json.JSONObject 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at com.cgi.activity.ActivityListNews$GetDeptAyncTask.doInBackground(ActivityListNews.java:81) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at com.cgi.activity.ActivityListNews$GetDeptAyncTask.doInBackground(ActivityListNews.java:1) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
04-11 11:52:04.694: E/AndroidRuntime(1026):  ... 3 more 
+2

發表您的完整的堆棧跟蹤 – Triode 2013-04-11 11:26:59

+0

9月4日至一十一日:17:36.334:E/AndroidRuntime(1066):致命異常:的AsyncTask#1 9月4日至一十一日:17:36.334:E/AndroidRuntime(1066):了java.lang.RuntimeException:執行時發生錯誤doInBackground() 9月4日至一十一日:17:36.334:E/AndroidRuntime(1066):\t at android.os.AsyncTask $ 3.done(AsyncTask.java:299) 04-11 09:17:36.334:E/AndroidRuntime(1066):\t at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java: 352) 04-11 09:17:36.334:E/AndroidRuntime(1066):\t at java.util.concurrent.FutureTask.setException(FutureTask.java:219) – 2013-04-11 11:35:09

+0

04-11 09:17:36.334:E/AndroidRuntime (1066):\t at com.cgi.activity.ActivityListNews $ GetDeptAyncTask.doInBackground(ActivityListNews.java:76) 04-11 09:17:36.334:E/AndroidRuntime(1066):\t at com.cgi.activity.ActivityListNews $ GetDeptAyncTask.doInBackground(ActivityListNews.java:1) 04-11 09:17:36.334:E/AndroidRuntime(1066):\t at android.os.AsyncTask $ 2.call(AsyncTask.java:287) 0 9月4日至一十一日:17:36.334:E/AndroidRuntime(1066):\t在java.util.concurrent.FutureTask.run(FutureTask.java:234) 9月4日至十一日:17:36.334:E/AndroidRuntime(1066) :\t ... 3個 – 2013-04-11 11:35:38

回答

2

你寫一個字符串:

out.writeObject(jObj.toString()); 

,但你把它轉換爲一個JSONObject當你讀它:

jsonObject = (JSONObject) in.readObject(); 

可以讀取它,將它轉換爲一個字符串,然後解析它:

jsonObject = new JSONObject((String) in.readObject()); 
+0

tkhs它的工作nJzk2 – 2013-04-15 13:13:39

+0

其實,現在你正在讀/寫字符串,你可以使用DataOutputStream並使用writeUTF和readUTF。 – njzk2 2013-04-15 13:50:57

+0

如何我這串「2013年4月2日11:26:00」轉換爲日期格式PLZ – 2013-04-16 08:53:34