我是nativescript的新手,開發幾個月的程序。我得到了同樣的錯誤,我正在使用radList視圖和Web圖像緩存插件。我們獲得了發送產品及其圖像和圖像大約500kb的api。我正在從他們的類別製作標籤,並在類別中爲每個類別製作列表視圖,並在其中列出產品。我的代碼就是這樣;Nativescript doInBackground拋出並導致OutOfMemory錯誤
var tabView = page.getViewById("tabViewContainer"); var meal_list = config.meal_list; meal_list.forEach(function (item) { var items = new observable_array_1.ObservableArray(); item.meal_list.forEach(function (item2) { items.push(new DataItemWithImage(item2.meal_id, item2.meal_name, item2.meal_cost,"http://sezginserpen.com.tr/test_image/" + item2.meal_id + ".jpg")); // items.push(new DataItemWithImage(item2.meal_id, item2.meal_name, item2.meal_cost,"http://pngimg.com/upload/pizza_PNG7132.png")); }); var wrapLayout = new wrapLayoutModule.WrapLayout(); var radListView = new listViewModule.RadListView(); var layoutBase = new listViewModule.ListViewGridLayout(); layoutBase.scrollDirection = "Vertical"; layoutBase.spanCount = 2; wrapLayout.className = "item"; wrapLayout.orientation = "horizontal"; radListView.listViewLayout = layoutBase; radListView.items = items;//<IC:WebImage stretch="fill" height="250" class="my-image-1" src="{{ image }}></IC:WebImage> radListView.itemTemplate = '<Border xmlns:IC="nativescript-web-image-cache" borderWidth="0.5" borderColor="lightgray"><stack-layout orientation="vertical" height="250" ><IC:WebImage horizontalAlignment="center" src="{{ image }}"></IC:WebImage><stack-layout width="100%" height="50%"> <label id="product_id_label" text="{{ id }}" style="visibility: collapsed" /><label class="align_center product_label" textWrap="true" text="{{ itemName }}" /> <label class="align_center product_label" textWrap="true" style="color:lightgray" text="{{ itemDescription }}" /> <Border borderWidth="1" borderColor="green" borderRadius="2" style="height:22%;width:95%"> <label tap="add_to_basket" class="align_center" style="background-color:white;color:green;" text="Sepete Ekle" /> </Border> </stack-layout> </stack-layout> </Border>'; wrapLayout.addChild(radListView); var tabViewItem = new tabViewModule.TabViewItem(); tabViewItem.title = item.category.category_name, tabViewItem.view = wrapLayout; var tabView = page.getViewById("tabViewContainer"); tabView.items.push(tabViewItem); });
和XML等;
<drawer:rad-side-drawer id="drawer"> <drawer:rad-side-drawer.mainContent> <!-- Home page contents --> <stack-layout loaded="contentLoaded"> <TabView id="tabViewContainer" selectedIndex="{{ index }}" selectedColor="#d43b2b" selectedIndexChanged="change" tabsBackgroundColor="#ffffff" > <TabView.items> </TabView.items> </TabView> </stack-layout> </drawer:rad-side-drawer.mainContent> <drawer:rad-side-drawer.drawerContent> <widgets:drawer-content /> </drawer:rad-side-drawer.drawerContent> </drawer:rad-side-drawer>
任何想法是什麼造成的?我正在使用ımagecache但每次都得到這個。而我的堆棧TRACE1之一:
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)Caused by: java.lang.OutOfMemoryError: Failed to allocate a 14745612 byte allocation with 12939040 free bytes and 12MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:763)
at org.nativescript.widgets.Async$Http$RequestResult.readResponseStream(Async.java:225)
at org.nativescript.widgets.Async$Http$HttpRequestTask.doInBackground(Async.java:303)
at org.nativescript.widgets.Async$Http$HttpRequestTask.doInBackground(Async.java:253)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 3 more
TRACE2:
java.lang.OutOfMemoryError: Failed to allocate a 1508364 byte allocation with 301952 free bytes and 294KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:975)
at android.graphics.Bitmap.createBitmap(Bitmap.java:946)
at android.graphics.Bitmap.createBitmap(Bitmap.java:913)
at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:55)
at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:30)
at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:259)
at com.facebook.imagepipeline.platform.ArtDecoder.decodeStaticImageFromStream(ArtDecoder.java:137)
at com.facebook.imagepipeline.platform.ArtDecoder.decodeFromEncodedImage(ArtDecoder.java:81)
at com.facebook.imagepipeline.decoder.ImageDecoder.decodeStaticImage(ImageDecoder.java:128)
at com.facebook.imagepipeline.decoder.ImageDecoder.decodeImage(ImageDecoder.java:94)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:194)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200(DecodeProducer.java:97)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:129)
at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:207)
at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:27)
at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43)
at java.lang.Thread.run(Thread.java:818)
這一個是另一個和不這個eror的類型,但我得到這個太:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.bringToFront()' on a null object reference
at com.telerik.android.primitives.widget.sidedrawer.transitions.DrawerTransitionBase.setProgress(DrawerTransitionBase.java:77)
at com.telerik.android.primitives.widget.sidedrawer.transitions.DrawerTransitionBase.onEnded(DrawerTransitionBase.java:226)
at com.telerik.android.primitives.widget.sidedrawer.transitions.DrawerTransitionBase.run(DrawerTransitionBase.java:221)
at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1119)
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1239)
at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:766)
at android.animation.ValueAnimator$AnimationHandler$1.run(ValueAnimator.java:801)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
at android.view.Choreographer.doCallbacks(Choreographer.java:695)
at android.view.Choreographer.doFrame(Choreographer.java:628)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
而且任何想法關於如何捕獲這種類型的錯誤?
謝謝你的幫助。
也許這個問題已經引起來裝載裏面的圖片列表視圖。作爲Android的解決方案,您可以使用nativescript-fresco -https://github.com/NativeScript/nativescript-fresco插件在列表視圖中顯示圖像。你可以在這裏找到示例 - https://github.com/telerik/nativescript-ui-samples/blob/release/sdk/app/listview/item-layouts/item-layouts-grid.android.xml –
謝謝你的幫助和我已經使用IC WebCache圖像,包括Fresco和另一個插件İOS。我意識到這個錯誤來自一個名爲https://www.npmjs.com/package/nativescript-slides的插件,並且當我不使用這個插件時,即使是大圖片也沒有錯誤。只有錯誤導致大圖像例如4mb甚至更多:)你知道任何其他插件滑塊? –
我無法找到另一個類似'nativescript-slides'的插件。我不確定這是否適用於您的項目,但是您可以使用「TabView」,它也支持在頁面之間滑動。 –