1

私はnativescriptと開発プログラムで数ヶ月の新機能です。同じエラーが発生し、radListビューとWeb画像キャッシュプラグインを使用しています。私たちは500kbほどの製品とその画像と画像を送るためのAPIを手に入れました。そして私は彼らのカテゴリーからタブを作っています。カテゴリーIでは、それぞれのカテゴリーのリストビューを作成し、そのカテゴリー内の商品をリストしています。そのような私のコード。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の1:

      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) 

は、この1つは別であり、この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) 

と任意のアイデアどのように私はこのタイプのエラーをキャッチできますか?

ありがとうございます。

+1

おそらく、この問題は内部の画像を読み込むことが原因とされていますリストビュー。 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 –

+0

ありがとう私は既にFrescoやİOS用のプラグインを含むIC WebCacheイメージを使用しています。そして、私はこのエラーがhttps://www.npmjs.com/package/nativescript-slidesと呼ばれるプラグインから来ていることを理解しています。このプラグインを使用しないと、大きな画像でもエラーはありません。大きな画像の例でエラーが発生するのは4MB以上です。また、スライダーの他のプラグインも知っていますか? –

+0

'nativescript-slides'に似た別のプラグインが見つかりませんでした。これがあなたのプロジェクトに当てはまるかどうかはわかりませんが、ページ間のスワイプもサポートする 'TabView'を使うことができます。 –

答えて

0

以下の添付の例は、iOSとAndroidの両方でNativeScirptのタブビューからタブを削除する方法を示しています。

メインpage.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo"> 
    <TabView id="tabViewContainer" loaded="tabviewLoaded"> 
     <TabView.items> 
      <TabViewItem title=""> 
       <TabViewItem.view> 
        <Label text="This is Label in Tab 1" /> 
       </TabViewItem.view> 
      </TabViewItem> 
      <TabViewItem title=""> 
       <TabViewItem.view> 
        <Label text="This is Label in Tab 2" /> 
       </TabViewItem.view> 
      </TabViewItem> 
     </TabView.items> 
    </TabView> 
</Page> 

メインpage.ts

import { EventData } from "data/observable"; 
    import { Page } from "ui/page"; 
    import {TabView} from "ui/tab-view"; 
    import {isAndroid, isIOS} from "platform" 



    export function tabviewLoaded(args:EventData){ 

     var tabview =<any> args.object; 

     if(isAndroid){ 
      var tabViewgrid = tabview._grid; 
      console.dump(tabViewgrid.removeViewAt(0)); 
     } 

     if(isIOS){ 
      tabview._ios.tabBar.hidden = true; 
     } 
    } 

メインpage.js

var platform_1 = require("platform"); 
function tabviewLoaded(args) { 
    var tabview = args.object; 
    if (platform_1.isAndroid) { 
     var tabViewgrid = tabview._grid; 
     console.dump(tabViewgrid.removeViewAt(0)); 
    } 
    if (platform_1.isIOS) { 
     tabview._ios.tabBar.hidden = true; 
    } 
} 
exports.tabviewLoaded = tabviewLoaded; 
+0

私はこれとそのうまくいったことを試みましたが、時々私は再びエラーを受け取りますdoYBackground() android.os.AsyncTask $ 3.done(AsyncTask.java:309)このようにして解決できませんでした:( –

関連する問題