簡體   English   中英

應用程序在片段和活動之間發送數據而崩潰

[英]App crashes by sending data between fragment and activity

我在MainActivity中鏈接了2個片段。 第二個片段具有一個帶有飽和度欄的ColorPicker輪,並將ColorPicker的rgb值發送到Main Activity。 沒有將rgb值發送到MainActivity,日志貓只顯示以下警告:

W/ResourceType: Skipping entry 0x1050089 in package table 0 because it is not complex!
W/ResourceType: Skipping entry 0x1050089 in package table 0 because it is not complex!
W/ResourceType: Skipping entry 0x1050089 in package table 0 because it is not complex!
D/dalvikvm: GC_FOR_ALLOC freed 1399K, 10% free 30330K/33479K, paused 19ms, total 21ms
D/dalvikvm: GC_FOR_ALLOC freed 135K, 10% free 30465K/33479K, paused 20ms, total 20ms
I/dalvikvm-heap: Grow heap (frag case) to 32.381MB for 1441296-byte allocation
D/dalvikvm: GC_FOR_ALLOC freed <1K, 9% free 31873K/34887K, paused 34ms, total 34ms
D/dalvikvm: GC_FOR_ALLOC freed <1K, 9% free 31873K/34887K, paused 19ms, total 19ms
I/dalvikvm-heap: Grow heap (frag case) to 35.476MB for 3244816-byte allocation
D/dalvikvm: GC_CONCURRENT freed 0K, 8% free 35041K/38087K, paused 2ms+2ms, total 26ms
D/dalvikvm: GC_FOR_ALLOC freed 1471K, 9% free 34803K/38087K, paused 17ms, total 17ms
I/dalvikvm-heap: Grow heap (frag case) to 37.493MB for 2359312-byte allocation
D/dalvikvm: GC_CONCURRENT freed <1K, 9% free 37107K/40455K, paused 2ms+21ms, total 46ms
W/ResourceType: Skipping entry 0x1050089 in package table 0 because it is not complex!
W/ResourceType: Skipping entry 0x1050089 in package table 0 because it is not complex!

我已經嘗試在R.java文件中找到0x01050089 ,但沒有結果。

如果將意圖代碼附加到我的Fragment類中以將rgb值發送到MainActivity,則在選擇2 Fragment后,我在logcat中收到以下錯誤,並且應用程序崩潰。

E/dalvikvm-heap: Out of memory on a 3244816-byte allocation.
I/dalvikvm: "main" prio=5 tid=1 RUNNABLE
I/dalvikvm:   | group="main" sCount=0 dsCount=0 obj=0x41063508 self=0x40e5ab08
I/dalvikvm:   | sysTid=6777 nice=0 sched=0/0 cgrp=apps handle=1074536240
I/dalvikvm:   | schedstat=( 2552959394 1319248728 5243 ) utm=210 stm=44 core=1
I/dalvikvm:     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
I/dalvikvm:     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:625)
I/dalvikvm:     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:478)
I/dalvikvm:     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
I/dalvikvm:     at android.content.res.Resources.loadDrawable(Resources.java:1963)
I/dalvikvm:     at android.content.res.Resources.getDrawable(Resources.java:672)
I/dalvikvm:     at android.support.v7.widget.TintResources.superGetDrawable(TintResources.java:48)
I/dalvikvm:     at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:374)
I/dalvikvm:     at android.support.v7.widget.TintResources.getDrawable(TintResources.java:44)
I/dalvikvm:     at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323)
I/dalvikvm:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:180)
I/dalvikvm:     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173)
I/dalvikvm:     at android.support.v7.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:421)
I/dalvikvm:     at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.prepareMenuItems(NavigationMenuPresenter.java:505)
I/dalvikvm:     at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.update(NavigationMenuPresenter.java:436)
I/dalvikvm:     at android.support.design.internal.NavigationMenuPresenter.updateMenuView(NavigationMenuPresenter.java:112)
I/dalvikvm:     at android.support.design.widget.NavigationView.inflateMenu(NavigationView.java:241)
I/dalvikvm:     at android.support.design.widget.NavigationView.<init>(NavigationView.java:169)
I/dalvikvm:     at android.support.design.widget.NavigationView.<init>(NavigationView.java:95)
I/dalvikvm:     at java.lang.reflect.Constructor.constructNative(Native Method)
I/dalvikvm:     at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
I/dalvikvm:     at android.view.LayoutInflater.createView(LayoutInflater.java:587)
I/dalvikvm:     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
I/dalvikvm:     at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
I/dalvikvm:     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
I/dalvikvm:     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
I/dalvikvm:     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
I/dalvikvm:     at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
I/dalvikvm:     at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
I/dalvikvm:     at com.example.christian.rapid_charge_quad_05.MainActivity.onCreate(MainActivity.java:63)
I/dalvikvm:     at android.app.Activity.performCreate(Activity.java:5206)
I/dalvikvm:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
I/dalvikvm:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
I/dalvikvm:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
I/dalvikvm:     at android.app.ActivityThread.access$700(ActivityThread.java:140)
I/dalvikvm:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
I/dalvikvm:     at android.os.Handler.dispatchMessage(Handler.java:99)
I/dalvikvm:     at android.os.Looper.loop(Looper.java:137)
I/dalvikvm:     at android.app.ActivityThread.main(ActivityThread.java:4921)
I/dalvikvm:     at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm:     at java.lang.reflect.Method.invoke(Method.java:511)
I/dalvikvm:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
I/dalvikvm:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
I/dalvikvm:     at dalvik.system.NativeStart.main(Native Method)
A/libc: Fatal signal 11 (SIGSEGV) at 0x000006a0 (code=1), thread 6777 (_charge_quad_05)

帶有ColorPicker的片段2:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootview = inflater.inflate(R.layout.fragment_beleuchtung, container, false);

    return rootview;
}


@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);



    ColorPicker colorPicker = (ColorPicker)getActivity().findViewById(R.id.color_picker);

    ValueBar valueBar = (ValueBar)getActivity().findViewById(R.id.valuebar);


    colorPicker.addValueBar(valueBar);
    colorPicker.getColor();

    colorPicker.setOldCenterColor(colorPicker.getColor());

    colorPicker.setOnColorChangedListener(this);

    colorPicker.setShowOldCenterColor(false);




}

 @Override
 public void onColorChanged(final int color) {

    final int c;

    final String[] colorrgb = new String[3];

    final TextView text = (TextView)getActivity().findViewById(R.id.Rot);
    final TextView text2 = (TextView)getActivity().findViewById(R.id.Grün);
    final TextView text3 = (TextView)getActivity().findViewById(R.id.Blau);

    c = color;

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // text.setTextColor(Color.rgb(Color.red(c), Color.green(c), Color.blue(c)));
            // text.setText("Rot" + Color.red(c)+",Blau"+Color.blue(c)+",Grün"+Color.green(c));

            text.setText(""+Color.red(c));
            text2.setText(""+Color.green(c));
            text3.setText(""+Color.blue(c));
            colorrgb[0] = String.valueOf(Color.red(c));
            colorrgb[1] = String.valueOf(Color.blue(c));
            colorrgb[2] = String.valueOf(Color.green(c));

        }
    },2000);

    Intent intent = new Intent(getActivity().getBaseContext(), MainActivity.class);
    intent.putExtra("color",colorrgb);
    getActivity().startActivity(intent);



}

    }

我收到Color值的MainActivity部分:

       Intent intent = getIntent();
    if(intent.getStringExtra("color") != null) {
        String[] color = intent.getStringArrayExtra("color");

    }

要與Fragment活動進行社區交流,您應該使用回調。 Android Developer上推薦

好。 只需執行以下操作:

1)創建一個界面

public interface OnColorChangeListener {
    void onColorChangeListener(int[] colors);
}

2)在YourActivity類中,它將作為您的Fragment的宿主:

public class YourActivity extends Activity implement OnColorChangeListener {
    int[] colors;
    public void onColorChangeListener(int[] colors) {
       //copy array colors to this.colors and do anything with new color.
    }
}

3)在您的片段中:

public class FragmentA extends Fragment {
    OnColorChangeListener mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnColorChangeListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnColorChangeListener");
        }
    }
    @Override
    public void onColorChanged(final int color) { 
       // i copy your code to demonstrate.
       new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                // text.setTextColor(Color.rgb(Color.red(c), Color.green(c), Color.blue(c)));
                // text.setText("Rot" + Color.red(c)+",Blau"+Color.blue(c)+",Grün"+Color.green(c));

               text.setText(""+Color.red(c));
               text2.setText(""+Color.green(c));
               text3.setText(""+Color.blue(c));
               colorrgb[0] = String.valueOf(Color.red(c));
               colorrgb[1] = String.valueOf(Color.blue(c));
               colorrgb[2] = String.valueOf(Color.green(c));
               mListener.onColorChangeListener(colorrgb);

           }
        },2000);

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM