1

Ich bin neu bei Nativescript und Entwicklung von Programmen über ein paar Monate. Ich habe denselben Fehler und ich benutze RadList View und Web Image Cache Plugins. Wir haben eine API für das Senden von Produkten und ihre Bilder und Bilder über 500kb. Und ich mache Tab von ihren Kategorien und in der Kategorie mache ich eine Listenansicht für jede Kategorie und listet Produkte darin auf. Mein Code so;Nativescript doInBackground ausgelöst und Ursache OutOfMemory Fehler

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); });

und XML dergleichen;

<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>

Jede Idee für das, was diese verursacht? Und ich benutze einen Magiercache, aber jedes Mal bekam ich das. Und einer meiner Stapel 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) 

Dieses ist eine andere und nicht über diese eror Typen, aber ich habe auch dies:

      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) 

und eine Idee Wie kann ich diese Art von Fehler abfangen?

Vielen Dank für Ihre Hilfe.

+1

Vielleicht ist diese Frage wurde im Inneren die Bilder werden geladen verursacht die Listenansicht Als Lösung für Android können Sie das nativescript-fresco -https: //github.com/NativeScript/nativescripts-fresco Plugin verwenden, um die Bilder in der Listenansicht anzuzeigen. Sie könnten hier ein Beispiel finden - https://github.com/telerik/nativescript-ui-samples/blob/release/sdk/app/listview/item-layouts/item-layouts-grid.android.xml –

+0

Vielen Dank für Ihre Hilfe und ich verwende bereits IC WebCache Bild einschließlich Fresco und ein anderes Plugin für iOS. Und ich erkenne, dass diese Fehler von einem Plugin namens https://www.npmjs.com/package/nativescript-slides kommen und wenn ich dieses Plugin nicht benutze, gibt es keinen Fehler, sogar große Bilder. Habe nur Fehler wegen großer Bilder Beispiel 4mb oder noch mehr bekommen :) Und kennst du noch ein anderes Plugin für Slider? –

+0

Ich konnte kein anderes Plugin finden, das "nativescript-slides" ähnlich ist. Ich bin mir nicht sicher, ob dies für Ihr Projekt zutrifft, aber Sie könnten 'TabView' verwenden, das auch Swipe zwischen den Seiten unterstützt. –

Antwort

0

Das unten angefügte Beispiel zeigt, wie Sie Tabs aus TabView in NativeScirpt für iOS und Android entfernen können.

Haupt 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> 

Haupt 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; 
     } 
    } 

Haupt 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

Ich habe das versucht und es funktioniert gut, aber manchmal werde ich wieder Fehler bekommen doInBackground() bei android.os.AsyncTask $ 3..done (AsyncTask.java309) wie folgt und ich konnte es nicht auflösen :( –