首页 > 其他 > 详细

百度Frontia应用数据存储在后台运行不起来

时间:2014-03-28 16:41:58      阅读:374      评论:0      收藏:0      [点我收藏+]

通过百度Frontia sdk的应用数据存储功能,从云存储下载或上传文件,百度提供的Demo是正常的。

但是加到自己的代码中就不能运行,后来发现,自己的代码是在后台运行的,Frontia Demo是在前台运行的。


原因是mCloudStorage.downloadFile()会创建Handler,而创建Handler是需要Looper消息循环来初始化的。如果在自己的子线程中调用mCloudStorage.downloadFile(),这个子线程是没有Lopper消息循环的,自然就创建不了Handler,直接报错:

03-28 12:40:29.120: E/AndroidRuntime(21077): FATAL EXCEPTION: Thread-6094

03-28 12:40:29.120: E/AndroidRuntime(21077): java.lang.RuntimeException: Can‘t create handler inside thread that has not called Looper.prepare()
03-28 12:40:29.120: E/AndroidRuntime(21077):  at android.os.Handler.<init>(Handler.java:121)
03-28 12:40:29.120: E/AndroidRuntime(21077):  at com.baidu.frontia.base.taskqueue.QueuedAsyncTaskHelper.<init>(SourceFile:71)
03-28 12:40:29.120: E/AndroidRuntime(21077):  at com.baidu.frontia.base.taskqueue.QueuedAsyncTaskHelper.instance(SourceFile:46)
03-28 12:40:29.120: E/AndroidRuntime(21077):  at com.baidu.frontia.module.storage.bcs.FrontiaBCSImpl.downloadFile(SourceFile:133)
03-28 12:40:29.120: E/AndroidRuntime(21077):  at com.baidu.frontia.api.FrontiaStorage.downloadFile(Unknown Source)

03-28 12:40:29.120: E/AndroidRuntime(21077):  at com.hugedata.speedometer.AppFileActivity$1LooperThread.run(AppFileActivity.java:152)


也就是说,子线程默认没有Looper,连Handler都创建不了。

解决方法,添加Looper:

注意示例代码中Looper.prepare();      Looper.myLooper().quit();   Looper.loop();这三句的位置:

  //-----------------------------------从百度云存储下载文件
  private boolean doDownloadFromBaiduCloud() {

      FileUtils.deleteFile(LOCAL_FILE_NAME);
      Looper.prepare();      
      //Frontia.init(HugeDataApp.getContext(), Constants.BaiduAPIKey_XMF);
      mCloudStorage = Frontia.getStorage();
      
      //三个参数
      mCloudStorage.downloadFile(mFile, 
              new FileProgressListener() {
                  @Override
                  public void onProgress(String source, long bytes, long total) {
                             
                  }
               }, 
              new FileTransferListener() {
        
                  @Override
                  public void onSuccess(String source, String newTargetName) {
   
                      mSuccess = true;
                      Looper.myLooper().quit();
                  }
        
                  @Override
                  public void onFailure(String source, int errCode, String errMsg) {
                      Looper.myLooper().quit();
                      mSuccess = false;
                  }
        
              });
      
      Looper.loop();
      return mSuccess;
      
  }




百度Frontia应用数据存储在后台运行不起来,布布扣,bubuko.com

百度Frontia应用数据存储在后台运行不起来

原文:http://blog.csdn.net/olevin/article/details/22391265

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!