2017-01-31 72 views
6

Tôi đã thử kiểm tra mã nổ trên Android thiết bị nhưng tôi không thể thấy bất kỳ dữ liệu nào trong các trường văn bản. Mã này hoạt động tốt trên Máy tính để bàn AIR nhưng trong Android không. Có khác biệt giữa chức năng AIR FileStream trên Máy tính để bànAndroid? Whats tốt nhất nền tảng chéo mã để lưu tệp và đọc ghi?Adobe AIR Android FileStream số

Mã này hoạt động trên Adobe Animate CC Android Trình giả lập.

import flash.filesystem.*; 

      var prefsFile:File; 
      [Bindable] var prefsXML:XML; 
      var stream:FileStream; 

      function appStart():void 
      { 
       prefsFile = File.applicationStorageDirectory; 
       prefsFile = prefsFile.resolvePath("preferences.xml"); 
       readXML(); 
      } 


      function readXML():void 
      { 
       stream = new FileStream(); 
       if (prefsFile.exists) { 
        stream.open(prefsFile, FileMode.READ); 
        processXMLData(); 
       } 
       else 
       { 
        saveData(); 
       } 

      } 


      function processXMLData():void 
      { 
       prefsXML = XML(stream.readUTFBytes(stream.bytesAvailable)); 
       stream.close(); 
       trace(prefsXML.Data1); 
       trace(prefsXML.Data2); 
       trace(prefsXML.Data3); 
       txt_D1.text = prefsXML.Data1; 
       txt_D2.text = prefsXML.Data2; 
       txt_D3.text = prefsXML.Data3; 

      } 


      function windowClosingHandler(event:Event):void 
      { 
       saveData(); 
      } 


      function saveData():void 
      { 
       createXMLData(); 
       writeXMLData(); 
      } 


      function createXMLData():void 
      { 
       prefsXML = <preferences/>; 
       prefsXML.Data1 = 1; 
       prefsXML.Data2 = 2; 
       prefsXML.Data3 = 3; 
      } 


      function writeXMLData():void 
      { 
       var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n'; 
       outputString += prefsXML.toXMLString(); 
       outputString = outputString.replace(/\n/g, File.lineEnding); 
       stream = new FileStream(); 
       stream.open(prefsFile, FileMode.WRITE); 
       stream.writeUTFBytes(outputString); 
       stream.close(); 
      } 

appStart(); 

Trả lời

4

Đó là cách đúng, chúng tôi sử dụng nó cho các ứng dụng AIR (Desktop, Android, iOS) để lưu trữ dữ liệu người dùng trên thiết bị/PC, File.applicationStorageDirectory là tốt. Vì vậy, mã của bạn là nền tảng chéo, nếu nó không hoạt động trên Android, bạn có thể có một số vấn đề khác, nhưng mã của bạn có vẻ tốt.

Để đọc/ghi dữ liệu đến File.applicationStorageDirectory, bạn không cần bất kỳ quyền rõ ràng nào trong tệp kê khai ứng dụng.

+0

Tôi đã chọn tất cả các quyền trong cài đặt và được biên dịch lại. bây giờ nó hoạt động. –

+0

@MohammadSamir bạn không cần ** tất cả quyền **. Một số người bị tắt bởi ứng dụng cần truy cập [không cần thiết] mọi thứ (thẻ SD, danh bạ điện thoại, GPS, v.v ... tại sao?), Thử cho phép "đọc/ghi vào bộ nhớ thiết bị" nếu tệp của bạn không đã lưu/tải trong 'File.applicationStorageDirectory' ... –

0

Nếu phiên bản Android của bạn từ 6.0 trở lên gần đây, bạn cần yêu cầu quyền như tệp hoặc máy ảnh khi chạy.

Đảm bảo bạn có AIR 24.0, với trình biên dịch tùy chọn -swf-version = 35, và làm điều gì đó như:

var permissionCheck: File = new File ("test"));

    permissionCheck.addEventListener(PermissionEvent.PERMISSION_STATUS , function permissionStatusHandler(e : PermissionEvent) :void 
        {       
         permissionCheck.removeEventListener(PermissionEvent.PERMISSION_STATUS , permissionStatusHandler); 
         if(e.status == PermissionStatus.GRANTED) 
         {        
          // save your file 
         } 
         else 
         { 
          showPermissionError(); 
         } 

        }); 

        try 
        { 
         permissionCheck.requestPermission(); 

        } 
        catch(error : Error) 
        { 

        } 

Xem ghi chú phát hành AIR để biết thêm thông tin như xử lý quyền đối với máy ảnh.

https://helpx.adobe.com/flash-player/release-note/fp_24_air_24_release_notes.html

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan