線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2651
推到 Plurk!
推到 Facebook!

Sqlite中Blob在Android里读取的问题

答題得分者是:aftcast
Fangaofeng
一般會員


發表:1
回覆:2
積分:0
註冊:2015-02-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-02-06 12:13:01 IP:119.136.xxx.xxx 訂閱
  TThread.CreateAnonymousThread(procedure ()
var
Index ,nCount:Integer;
mItem : TMetropolisUIListBoxItem;
jpgStream:TMemoryStream;
begin
nCount := dmAndroid.tblArtBasicInfo.RecordCount;
if nCount > 0 then
Begin
for Index := 1 to nCount do
begin
jpgStream := TMemoryStream.Create;
mItem := TMetropolisUIListBoxItem.Create(lbxArtInfo);
mItem.Title := dmAndroid.tblArtBasicInfo.FieldByName('ArtNo').AsString;
mItem.SubTitle := dmAndroid.tblArtBasicInfo.FieldByName('GroupName').AsString;
mItem.Text := dmAndroid.tblArtBasicInfo.FieldByName('ArtNO').AsString;
mItem.Description := dmAndroid.tblArtBasicInfo.FieldByName('ArtName').AsString;
mItem.Name:= 'Item' IntToStr(Index);
TBlobField(dmAndroid.tblArtBasicInfo.FieldByName('iPhoto')).SaveToStream(jpgStream);
mItem.Icon.LoadFromStream(jpgStream);
lbxArtInfo.AddObject(mItem);
dmAndroid.tblArtBasicInfo. Next;
jpgStream.DisposeOf;
end;
End;
end).Start;
上面程式在Win32下運行正常,在Android下無任何提示,註釋掉此行 TBlobField(dmAndroid.tblArtBasicInfo.FieldByName('iPhoto')).SaveToStream(jpgStream)后就可正常運行,請問是什麼問題?
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-02-06 16:09:54 IP:36.229.xxx.xxx 訂閱
可以再次確認一下是下面哪一行嗎?

(1)TBlobField(dmAndroid.tblArtBasicInfo.FieldByName('iPhoto')).SaveToStream(jpgStream);
(2)mItem.Icon.LoadFromStream(jpgStream);

只註解(2) 會不會錯? (我會這樣問是曾遇到類似的,是load的時候出問題)

此外,正常來說,(2)的上面是否該有 jpgStream.Position := 0; 這行?

確認上述二個問題,再討論一下,ok?

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Fangaofeng
一般會員


發表:1
回覆:2
積分:0
註冊:2015-02-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-02-06 16:33:30 IP:119.136.xxx.xxx 訂閱
注解(1)就OK了,但是我要這行的, jpgStream.Position := 0 也不行
編輯記錄
Fangaofeng 重新編輯於 2015-02-06 16:39:43, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-02-06 16:52:46 IP:36.229.xxx.xxx 訂閱
ok,那麼再進一步的請問一下:

若沒有註任何程式下, android 在 run的時候,會跳出嗎? 或者只是沒反應? (我所只的沒反應是沒有你預期的結果)
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-02-06 16:57:41 IP:36.229.xxx.xxx 訂閱
我上面問的不太好,我再補充一下:  sorry

我是只,在win上跑很ok,然後在 android上跑的話… 是怎麼樣的 具體的表現,細節一點。

比如說 當掉,比如說 閃退,比如說沒有預期的結果(比如show出圖),或是……

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-02-06 17:15:33 IP:36.229.xxx.xxx 訂閱
再仔細看你的程式,並思考後,我大概知道問題了。

在你的程式裡,用了二個 "全域" 的變數

dmAndroid.tblArtBasicInfo

lbxArtInfo

你必需確保它們是 thread-safe 的。 我不清楚它們是或不是,但照你目前run的情形,理當第一個應該就不是安全的…

以上是目前單從你程式碼上看來的合理解釋。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-02-06 17:25:57 IP:36.229.xxx.xxx 訂閱
最後補充一個 相關的 情形。

就在昨天的時候,幫一個朋友處理一件程式問題。最後發現

imgCameraImage->Bitmap->LoadFromStream(FParsedData); //(imgcameraimage 是一個 timage)

上面那行在 thread 中跑。

在window上 一切正常。 camera 的畫面都出現。

但到了 android,一切無畫面,全卡在那一行上…

後來我把它加入 "同步" 後,不管是win上,mac上,ios上,android,通通都ok。

所以,我想說的是,不能因為 windows正常就認定它是 thread-safe的,我是不清楚 windows為何會耐受力好。也許是fmx本身的寫法,也可能是因為 桌機的cpu速度,等等都有可能使得" 看起來 " 正常。或是在某些機器上或裝置上正常。那些正常都像是 "剛好" 正常的情形。

以上分享。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-02-06 17:29:39 IP:36.229.xxx.xxx 訂閱
可把有問題的包起來:

TThread.Synchronize(nil, procedure
begin
Form1.Memo1.Lines.Add(IntToStr(FThreadID) ' : ' DateTimeToStr(Now));
end);

依樣畫xx,你的情形應可試:

TThread.Synchronize(nil, procedure
begin
TBlobField(dmAndroid.tblArtBasicInfo.FieldByName('iPhoto')).SaveToStream(jpgStream);
end);


試看看

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Fangaofeng
一般會員


發表:1
回覆:2
積分:0
註冊:2015-02-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-02-07 10:17:34 IP:119.136.xxx.xxx 訂閱
Synchronize 之后問題解決 Thanks!!!
系統時間:2024-03-29 8:07:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!