RAUploadManager.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764
  1. package com.usai.util;
  2. import android.content.Context;
  3. import android.content.SharedPreferences;
  4. import android.net.ConnectivityManager;
  5. import android.net.NetworkInfo;
  6. import android.os.Bundle;
  7. import android.util.Base64;
  8. import android.util.Log;
  9. import com.usai.redant.raimage.RedAntApplication;
  10. import org.json.JSONException;
  11. import org.json.JSONObject;
  12. import java.io.ByteArrayInputStream;
  13. import java.io.ByteArrayOutputStream;
  14. import java.io.File;
  15. import java.io.IOException;
  16. import java.io.ObjectInputStream;
  17. import java.io.ObjectOutputStream;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import static com.usai.util.Network.URL_UPLOAD;
  21. /**
  22. * Created by ray on 13/06/2017.
  23. */
  24. public class RAUploadManager {
  25. public int maxThread=3;
  26. public int activeThread;
  27. public int maxRetry=5;
  28. public int retryWaiting=300;
  29. public Boolean wifiOnly=false;
  30. // public Boolean autoStart=true;
  31. // public Boolean removeFinish=true;
  32. // public Boolean removeError=false;
  33. public QueueStatus queue_status;
  34. public static final int RESULT_BARCODE_ERROR=-50;
  35. public TaskStatus newtaskStatus= TaskStatus.TaskStatusWait;
  36. private ArrayList<Bundle> arr_queue;
  37. public ArrayList<Bundle> get_arr_queue()
  38. {
  39. return arr_queue;
  40. }
  41. // private List<Bundle> operation_queue;
  42. // private ExecutorService es = Executors.newFixedThreadPool(3);//
  43. // .newFixedThreadPool();
  44. // private CountDownLatch latch = new CountDownLatch(maxThread);
  45. private RAOperationQueue operation_queue;
  46. public enum QueueStatus {
  47. QueueStatusDefault,
  48. QueueStatusAdd,
  49. QueueStatusError,
  50. QueueStatusFinishWithError,
  51. QueueStatusFinish
  52. }
  53. public enum TaskStatus {
  54. TaskStatusStop,
  55. TaskStatusStart,
  56. TaskStatusError,
  57. TaskStatusWait,
  58. TaskStatusFinish,
  59. //TaskStatusCancel,
  60. }
  61. public UIUpdateListener uiUpdateListener;
  62. public interface UIUpdateListener {
  63. // void onProgress(long index, double percentage);
  64. void updateCell(long index, Bundle taskinfo);
  65. // void updateList();
  66. void updateList(ArrayList<Bundle> newlist);
  67. // void addTasks(ArrayList<Bundle> tasks);
  68. // void RemoveTasks(ArrayList<Bundle> tasks);
  69. // void onFinish(int code, String res/*, HashMap<String, List<String>> headers*/);
  70. }
  71. // class Poll implements Runnable {
  72. // public void run() {
  73. // // while (queue.size()>0) {
  74. // while (!operation_queue.isEmpty()) {
  75. // System.out.println(operation_queue.poll());
  76. // }
  77. // latch.countDown();
  78. // }
  79. // }
  80. public RAUploadManager()
  81. {
  82. queue_status = QueueStatus.QueueStatusDefault;
  83. SharedPreferences UMSetting = RedAntApplication.getInstance()
  84. .getSharedPreferences("UploadManager", 0);
  85. if(UMSetting!=null)
  86. {
  87. // autoStart = UMSetting.getBoolean("auto_upload",false);
  88. // removeFinish = UMSetting.getBoolean("auto_rm_finish",false);
  89. // removeError = UMSetting.getBoolean("auto_rm_error",false);
  90. maxRetry = UMSetting.getInt("retry_count",5);
  91. newtaskStatus = TaskStatus.values()[UMSetting.getInt("newtask_status",TaskStatus.TaskStatusWait.ordinal())];
  92. maxThread = UMSetting.getInt("max_thread",3);
  93. wifiOnly = UMSetting.getBoolean("wifi_only",false);
  94. }
  95. operation_queue = new RAOperationQueue();
  96. operation_queue.setCallback(new RAOperationQueue.OperationCallback() {
  97. @Override
  98. public Boolean operate(final Bundle taskinfo) {
  99. //
  100. // ConnectivityManager connManager = (ConnectivityManager) context
  101. // .getSystemService(Context.CONNECTIVITY_SERVICE);
  102. //
  103. // NetworkInfo networkInfo = connManager
  104. // .getActiveNetworkInfo();
  105. // if (networkInfo == null)
  106. // {
  107. // dbgUtil.Logd(
  108. // "Current Network info",
  109. // "can not get Active NetworkInfo!");
  110. // false;
  111. // }
  112. // NetworkInfo.State netState = networkInfo
  113. // .getState();
  114. // if (netState != NetworkInfo.State.CONNECTED)
  115. // {
  116. // dbgUtil.Logd(
  117. // "Current Network info",
  118. // "not Connected!State="
  119. // + netState);
  120. // return;
  121. // }
  122. // int iconntype = -1;
  123. // iconntype = networkInfo
  124. // .getType();
  125. // SharedPreferences pref = RedAntApplication
  126. // .getInstance()
  127. // .getSharedPreferences(
  128. // "UploadManager",
  129. // 0);
  130. //
  131. //// String aa = pref
  132. //// .getString(
  133. //// "aa",
  134. //// null);
  135. //// String ea = pref
  136. //// .getString(
  137. //// "ea",
  138. //// null);
  139. //// if (iconntype == ConnectivityManager.TYPE_WIFI)
  140. //// {
  141. //// if (!TextUtils
  142. //// .isEmpty(aa))
  143. //// RedAntApplication.active_address = aa;
  144. //// }
  145. //// else
  146. //// {
  147. //// if (!TextUtils
  148. //// .isEmpty(ea))
  149. //// RedAntApplication.active_address = ea;
  150. //// }
  151. // boolean
  152. // wifi_only
  153. // =pref.getBoolean("wifi_only",
  154. // true);
  155. //
  156. // if
  157. // (wifi_only
  158. // == true
  159. // && iconntype !=
  160. // ConnectivityManager.TYPE_WIFI
  161. // && iconntype !=
  162. // 9/* earthnet */)
  163. //
  164. boolean ret=false;
  165. String path=taskinfo.getString("path");
  166. taskinfo.putInt("status",TaskStatus.TaskStatusStart.ordinal());
  167. String url=taskinfo.getString("url")+""+URL_UPLOAD;
  168. int waiting=taskinfo.getInt("retry_waiting",0);
  169. int newwaiting = waiting;
  170. if(newwaiting/60.0<20)
  171. newwaiting+=retryWaiting;
  172. if(newwaiting>1200)
  173. newwaiting = 1200;
  174. taskinfo.putInt("retry_waiting",newwaiting);
  175. // try{
  176. try {
  177. Thread.currentThread().sleep(waiting*1000);
  178. } catch (InterruptedException e) {
  179. e.printStackTrace();
  180. }
  181. // }catch(InterruptedException ie){
  182. // ie.printStackTrace();
  183. // }
  184. JSONObject result=Network.UploadImage(path, taskinfo.getBundle("params"), url, new Network.FileUploadListener() {
  185. @Override
  186. public double percent_step() {
  187. //进度刷新步进 3%
  188. return 3.0;
  189. }
  190. @Override
  191. public boolean interupt() {
  192. // if(taskinfo.getBoolean("iscancel",false))
  193. // return false;
  194. return taskinfo.getBoolean("iscancel",false);
  195. }
  196. @Override
  197. public void onProgress(long pro, double percentage) {
  198. synchronized(this){
  199. Log.d("_synchronized", "UploadImage onProgress: " + percentage);
  200. long timeStart = System.currentTimeMillis();
  201. taskinfo.putDouble("progress",percentage);
  202. if (uiUpdateListener!=null) {
  203. int index = arr_queue.indexOf(taskinfo);
  204. // uiUpdateListener.onProgress(index,percentage);
  205. uiUpdateListener.updateCell(index,taskinfo);
  206. }
  207. Log.d("_synchronized", "UploadImage onProgress: end" + (System.currentTimeMillis() - timeStart));
  208. }
  209. }
  210. @Override
  211. public void onFinish(int code, String res) {
  212. Log.d("", "onFinish: ");
  213. }
  214. });
  215. int r = 0;
  216. try {
  217. r = result.getInt("result");
  218. if(r==2|| r==RESULT_BARCODE_ERROR)
  219. {
  220. taskinfo.putInt("status",TaskStatus.TaskStatusFinish.ordinal());
  221. if(r==2)
  222. taskinfo.putString("msg","upload successful");
  223. else {
  224. String rmsg=result.getString("msg");
  225. taskinfo.putString("msg", "warning: " + rmsg);
  226. }
  227. }
  228. else
  229. {
  230. if(taskinfo.getInt("retry",0)>=maxRetry)
  231. {
  232. taskinfo.putInt("status",TaskStatus.TaskStatusError.ordinal());
  233. taskinfo.putDouble("progress",0.0);
  234. String rmsg=result.getString("msg");
  235. taskinfo.putString("msg",rmsg);
  236. }
  237. else
  238. {
  239. taskinfo.putInt("retry",taskinfo.getInt("retry",0)+1);
  240. taskinfo.putInt("status",TaskStatus.TaskStatusWait.ordinal());
  241. taskinfo.putDouble("progress",0.0);
  242. taskinfo.putString("msg","connection lost, retry...");
  243. ret=true;
  244. }
  245. }
  246. } catch (JSONException e) {
  247. // String rmsg=result.getString("msg");
  248. taskinfo.putInt("status",TaskStatus.TaskStatusError.ordinal());
  249. taskinfo.putDouble("progress",0.0);
  250. taskinfo.putString("msg","can not upload, please contact administrator.");
  251. e.printStackTrace();
  252. }
  253. finally {
  254. synchronized (this)
  255. {
  256. Log.d("_synchronized", "UploadImage finally " );
  257. long timeStart = System.currentTimeMillis();
  258. if (uiUpdateListener!=null) {
  259. int index = arr_queue.indexOf(taskinfo);
  260. uiUpdateListener.updateCell(index,taskinfo);
  261. }
  262. Log.d("_synchronized", "UploadImage finally finish" + (System.currentTimeMillis() - timeStart));
  263. }
  264. }
  265. return ret;
  266. // int a=0;
  267. // System.out.println(a+"running tid="+Thread.currentThread().getId());
  268. // int min=1000;
  269. // int max=5000;
  270. // int sleep=new Random().nextInt(max)%(max-min+1) + min;
  271. // try{
  272. // Thread.currentThread().sleep(sleep);
  273. // }catch(InterruptedException ie){
  274. // ie.printStackTrace();
  275. // }
  276. // System.out.println(a+" "+sleep+" finish tid="+Thread.currentThread().getId());
  277. }
  278. @Override
  279. public void operateFinish(Bundle taskinfo) {
  280. TaskStatus status= TaskStatus.values()[taskinfo.getInt("status",0)];
  281. //新增逻辑,对于成功上传的图片,从书记删除
  282. //taskinfo.getString("msg").indexOf("warning:")<0 没有匹配错误
  283. String path = filePath(taskinfo);
  284. File file = new File(path);
  285. //只有finish的task 可以删除图片
  286. if(file.exists()&&taskinfo.getInt("status")== TaskStatus.TaskStatusFinish.ordinal()&&taskinfo.getString("msg").indexOf("warning:")<0)
  287. {
  288. String filepath=file.getAbsolutePath();
  289. file.delete();
  290. RAUtil.updateGallery(filepath);
  291. }
  292. ///////////////////////////////////////////////
  293. boolean removefromlist=false;
  294. // if (status==TaskStatus.TaskStatusFinish&&removeFinish)
  295. // removefromlist=true;
  296. // else if (status==TaskStatus.TaskStatusError&&removeError)
  297. // removefromlist=true;
  298. synchronized (this)
  299. {
  300. Log.d("_synchronized", "OperationCallback operateFinish: " );
  301. long timeStart = System.currentTimeMillis();
  302. if(removefromlist)
  303. {
  304. removeTask(taskinfo);
  305. // arr_queue.remove(taskinfo);
  306. // if(uiUpdateListener!=null)
  307. // uiUpdateListener.updateList();
  308. }
  309. else
  310. {
  311. saveTasks();
  312. }
  313. Log.d("_synchronized", "OperationCallback operateFinish: end" + (System.currentTimeMillis() - timeStart));
  314. // saveTasks();
  315. }
  316. }
  317. });
  318. // operation_queue = new List<Bundle>() {};
  319. loadTask();
  320. }
  321. private void loadTask()
  322. {
  323. stopAllTasks();
  324. arr_queue = new ArrayList<Bundle>();
  325. Log.d("_RAIMAGE", "saveTasks: RAUploadManager");
  326. SharedPreferences pref = RedAntApplication.getInstance()
  327. .getSharedPreferences("RA Image", 0);
  328. try {
  329. String tasksBase64 = pref.getString("task_list", "");
  330. // ArrayList<String> wrap_arr = new ArrayList<String>();
  331. // for( Bundle b:arr_queue)
  332. // {
  333. // String sjson=RAUtil.Bundle2Json(b).toString();
  334. // Log.d("_RAIMAGE", "saveTasks: "+sjson);
  335. // wrap_arr.add(sjson);
  336. // }
  337. //
  338. // ByteArrayOutputStream baos = new ByteArrayOutputStream();
  339. // ObjectOutputStream oos = new ObjectOutputStream(baos);
  340. // oos.writeObject(wrap_arr);
  341. //
  342. // String tasksBase64 = android.util.Base64.encodeToString(baos.toByteArray(), android.util.Base64.DEFAULT);//new String(Base64.encodeBase64(baos.toByteArray()));
  343. //
  344. //
  345. // editor.putString("task_list", tasksBase64);
  346. //
  347. //
  348. // editor.commit();
  349. if(tasksBase64.length()>0)
  350. {
  351. byte[] decode=Base64.decode(tasksBase64,Base64.DEFAULT);
  352. ByteArrayInputStream bais= new ByteArrayInputStream(decode);
  353. ObjectInputStream ois = null;
  354. ois = new ObjectInputStream(bais);
  355. ArrayList<String> arr_load=(ArrayList<String>)ois.readObject();
  356. for(String s:arr_load)
  357. {
  358. Log.d("_RAIMAGE", "loadTask: "+s);
  359. JSONObject jsobj = new JSONObject(s);
  360. Bundle b=RAUtil.Json2Bundle(jsobj);
  361. arr_queue.add(b);
  362. // String sjson=RAUtil.Bundle2Json(b).toString();
  363. // wrap_arr.add(sjson);
  364. }
  365. }
  366. } catch (IOException e) {
  367. e.printStackTrace();
  368. } catch (ClassNotFoundException e) {
  369. e.printStackTrace();
  370. } catch (JSONException e) {
  371. e.printStackTrace();
  372. }
  373. for(Bundle b:arr_queue)
  374. {
  375. TaskStatus status= TaskStatus.values()[b.getInt("status",0)];
  376. if (status!=TaskStatus.TaskStatusFinish&&status!=TaskStatus.TaskStatusError)
  377. startTask(b);
  378. }
  379. // int a = 0;
  380. // 此处缺少读取持久话保存任务队列的实现。
  381. }
  382. public void addTask(Bundle task)
  383. {
  384. synchronized (this)
  385. {
  386. Log.d("_synchronized", "addTask: ");
  387. long timeStart = System.currentTimeMillis();
  388. arr_queue.add(task);
  389. saveTasks();
  390. Log.d("_synchronized", "addTask: end" + (System.currentTimeMillis() - timeStart));
  391. }
  392. if(newtaskStatus== TaskStatus.TaskStatusWait)
  393. {
  394. startTask(task);
  395. }
  396. };
  397. public void addTasks(ArrayList<Bundle> tasks)
  398. {
  399. synchronized (this)
  400. {
  401. Log.d("_synchronized", "addTasks: ");
  402. long timeStart = System.currentTimeMillis();
  403. arr_queue.addAll(tasks);
  404. saveTasks();
  405. Log.d("_synchronized", "addTasks: end" + (System.currentTimeMillis() - timeStart));
  406. }
  407. if(newtaskStatus== TaskStatus.TaskStatusWait)
  408. {
  409. for (Bundle task:tasks)
  410. {
  411. startTask(task);
  412. }
  413. }
  414. };
  415. public void startTask(Bundle task)
  416. {
  417. task.putBoolean("iscancel",false);
  418. boolean canstart = true;
  419. ConnectivityManager connManager = (ConnectivityManager) RedAntApplication.getInstance()
  420. .getSystemService(Context.CONNECTIVITY_SERVICE);
  421. NetworkInfo networkInfo = connManager
  422. .getActiveNetworkInfo();
  423. if (networkInfo == null)
  424. {
  425. dbgUtil.Logd(
  426. "Current Network info",
  427. "can not get Active NetworkInfo!");
  428. canstart = false;
  429. }
  430. else
  431. {
  432. NetworkInfo.State netState = networkInfo
  433. .getState();
  434. if (netState != NetworkInfo.State.CONNECTED)
  435. {
  436. dbgUtil.Logd(
  437. "Current Network info",
  438. "not Connected!State="
  439. + netState);
  440. canstart = false;
  441. }
  442. int iconntype = -1;
  443. iconntype = networkInfo
  444. .getType();
  445. if(wifiOnly == true
  446. && iconntype !=
  447. ConnectivityManager.TYPE_WIFI
  448. && iconntype !=
  449. 9/* earthnet */)
  450. {
  451. canstart = false;
  452. }
  453. }
  454. if(canstart) {
  455. task.putInt("retry_waiting",0);
  456. task.putInt("status", TaskStatus.TaskStatusWait.ordinal());
  457. operation_queue.addOperation(task);
  458. }
  459. else
  460. {
  461. task.putInt("status", TaskStatus.TaskStatusStop.ordinal());
  462. if (uiUpdateListener!=null) {
  463. int index = arr_queue.indexOf(task);
  464. // uiUpdateListener.onProgress(index,percentage);
  465. uiUpdateListener.updateCell(index,task);
  466. }
  467. }
  468. };
  469. public void clearTask()
  470. {
  471. ArrayList<Bundle> remove = new ArrayList<Bundle>();
  472. for(Bundle b:arr_queue)
  473. {
  474. // if(TaskStatus.values()[b.getInt("status",0)]==TaskStatus.TaskStatusStart||TaskStatus.values()[b.getInt("status",0)]==TaskStatus.TaskStatusWait)
  475. // continue;
  476. if(TaskStatus.values()[b.getInt("status",0)]==TaskStatus.TaskStatusFinish||TaskStatus.values()[b.getInt("status",0)]==TaskStatus.TaskStatusError)
  477. remove.add(b);
  478. // removeTask(b);
  479. }
  480. removeTasks(remove);
  481. }
  482. public void removeTask(Bundle task)
  483. {
  484. synchronized (this)
  485. {
  486. Log.d("_synchronized", "removeTask");
  487. long timeStart = System.currentTimeMillis();
  488. arr_queue.remove(task);
  489. saveTasks();
  490. String path = filePath(task);
  491. File file = new File(path);
  492. //只有finish的task 可以删除图片
  493. if(file.exists()&&task.getInt("status")== TaskStatus.TaskStatusFinish.ordinal())
  494. {
  495. String filepath=file.getAbsolutePath();
  496. file.delete();
  497. RAUtil.updateGallery(filepath);
  498. }
  499. if(uiUpdateListener!=null)
  500. uiUpdateListener.updateList(arr_queue);
  501. Log.d("_synchronized", "removeTask: end" + (System.currentTimeMillis() - timeStart));
  502. }
  503. };
  504. public void removeTasks(List<Bundle> tasks)
  505. {
  506. synchronized (this)
  507. {
  508. Log.d("_synchronized", "removeTasks: " );
  509. long timeStart = System.currentTimeMillis();
  510. arr_queue.removeAll(tasks);
  511. saveTasks();
  512. for(Bundle task:tasks)
  513. {
  514. String path = filePath(task);
  515. File file = new File(path);
  516. if(file.exists()&&task.getInt("status")== TaskStatus.TaskStatusFinish.ordinal())
  517. {
  518. String filepath = file.getAbsolutePath();
  519. file.delete();
  520. RAUtil.updateGallery(filepath);
  521. }
  522. }
  523. if(uiUpdateListener!=null)
  524. uiUpdateListener.updateList(arr_queue);
  525. Log.d("_synchronized", "removeTasks: end" + (System.currentTimeMillis() - timeStart));
  526. }
  527. };
  528. public void stopAllTasks()
  529. {
  530. if(arr_queue==null)
  531. return;
  532. for (Bundle task:arr_queue)
  533. {
  534. stopTask(task);
  535. }
  536. };
  537. public void stopTask(Bundle task)
  538. {
  539. if(task.getInt("status")!= TaskStatus.TaskStatusStart.ordinal()&&task.getInt("status")!= TaskStatus.TaskStatusWait.ordinal())
  540. return;
  541. task.putBoolean("iscancel",true);
  542. // long tid=task.getLong("tid",-1);
  543. // if(tid>0)
  544. // {
  545. //
  546. //
  547. // }
  548. // task.tet("tid",Thread.currentThread().getId());
  549. // RAUploadOperation
  550. }
  551. public void saveTasks()
  552. {
  553. Log.d("_RAIMAGE", "saveTasks: RAUploadManager");
  554. SharedPreferences pref = RedAntApplication.getInstance()
  555. .getSharedPreferences("RA Image", 0);
  556. SharedPreferences.Editor editor = pref.edit();
  557. try {
  558. ArrayList<String> wrap_arr = new ArrayList<String>();
  559. for( Bundle b:arr_queue)
  560. {
  561. String sjson=RAUtil.Bundle2Json(b).toString();
  562. Log.d("_RAIMAGE", "saveTasks: "+sjson);
  563. wrap_arr.add(sjson);
  564. }
  565. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  566. ObjectOutputStream oos = new ObjectOutputStream(baos);
  567. oos.writeObject(wrap_arr);
  568. String tasksBase64 = android.util.Base64.encodeToString(baos.toByteArray(), android.util.Base64.DEFAULT);//new String(Base64.encodeBase64(baos.toByteArray()));
  569. editor.putString("task_list", tasksBase64);
  570. editor.commit();
  571. // byte[] decode=Base64.decode(personBase64,Base64.DEFAULT);
  572. // ByteArrayInputStream bais= new ByteArrayInputStream(decode);
  573. //
  574. // ObjectInputStream ois = new ObjectInputStream(bais);
  575. // ArrayList<String> arr_load=(ArrayList<String>)ois.readObject();
  576. // int a = 0;
  577. }
  578. catch (Exception e)
  579. {
  580. e.printStackTrace();
  581. }
  582. // if (m_swSave.isChecked()&&!TextUtils.isEmpty(encryptPass)&&!TextUtils.isEmpty(encryptUser))
  583. // {
  584. // editor.putString("user", encryptUser);
  585. // editor.putString("password", encryptPass);
  586. // editor.putBoolean("kepppass", true);
  587. // }
  588. // else
  589. // {
  590. // editor.putString("user", null);
  591. // editor.putString("password", null);
  592. // editor.putBoolean("kepppass", false);
  593. // }
  594. //
  595. // editor.puts
  596. //
  597. // editor.commit();
  598. };
  599. private String filePath(Bundle task)
  600. {
  601. // String path = Environment.getExternalStorageDirectory().getPath();
  602. // path+="/"+task.getString("path");
  603. // path+="/"+task.getString("file");
  604. return task.getString("path","");
  605. }
  606. }