将数据从服务传递到片段,得到零点 [英] passing data from service to fragment giving null point

查看:85
本文介绍了将数据从服务传递到片段,得到零点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用BroadcastReceiver从服务中获取数据,并且能够在日志中显示该数据,但是当我尝试使用像这样的捆绑包发送数据时

I am trying to get the data from service using BroadcastReceiver and i am able to display that data in the Log but when i try to send the data using the Bundle like this

 @Override
protected void onStart() {
    myReceiver = new MainActivity.MyReceiver();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(MediaService.MY_ACTION);
    registerReceiver(myReceiver, intentFilter);
    super.onStart();
}

private class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub

        String datapa = arg1.getStringExtra("DATAPASSED");
        String datap2 = arg1.getStringExtra("ALBUM_DATA");
        Log.d("TITLE OF SONG",datapa);
        Log.d("ALBUM",datap2);



            Bundle bundle = new Bundle();
            bundle.putString("Title",datapa);
            bundle.putString("album", datap2);
            Songs someFragment = new Songs();
            someFragment.setArguments(bundle);


    }

}

并获取这样的数据

   String strtext = getArguments().getString("album");
        if (strtext!=null){
            textView.setText(strtext);
        }else {
            textView.setText(String.valueOf(songarr.size()));
        }
 String title = getArguments().getString("Title");
    if (title!=null){
        textView.setText(title);
    }else {
        textView.setText("Total Songs");
    }

我遇到错误

 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
                  at beatbox.neelay.anotherbeat.Fragment.Songs.onCreateView(Songs.java:55)
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298)
                  at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
                  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
                  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
                  at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1969)
                  at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620)
                  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
                  at com.antonyt.infiniteviewpager.InfinitePagerAdapter.finishUpdate(InfinitePagerAdapter.java:67)
                  at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
                  at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
                  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
                  at android.view.View.measure(View.java:18811)
                  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
                  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
                  at android.view.View.measure(View.java:18811)
                  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
                  at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)
                  at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:786)
                  at android.view.View.measure(View.java:18811)
                  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
                  at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                  at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                  at android.view.View.measure(View.java:18811)
                  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
                  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                  at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                  at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                  at android.view.View.measure(View.java:18811)
                  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
                  at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                  at android.view.View.measure(View.java:18811)
                  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
                  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                  at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                  at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                  at android.view.View.measure(View.java:18811)
                  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
                  at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                  at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2645)
                  at android.view.View.measure(View.java:18811)
                  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2127)
                  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1243)
                  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1479)
                  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1134)
                  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6045)
                  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:860)
                  at android.view.Choreographer.doCallbacks(Choreographer.java:672)
                  at android.view.Choreographer.doFrame(Choreographer.java:608)
                  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:846)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Loop

问题是我正在播放正在播放的歌曲,因此当用户单击按钮时,服务会将当前正在播放的歌曲数据发送到活动,然后从活动发送到片段,当歌曲不播放时,它将仅显示总歌曲,但是当我运行该应用程序时,它崩溃,提示为空字符串,但我正在设置else语句,他们在做什么我错了?任何提示都将是有用的.直到用户单击最重要的列表,该片段才会获取数据.使用相同的捆绑方式,我可以将数据发送到其他片段值是null我该如何解决.

the thing is i am playing song in service so when the user click the button the service will send the current playing song data to the activity and then from activity to the fragment and when the song is not playing it will just show the total song but when i run the app it crash saying that the null string but i am setting the else statement they what i am doing wrong ?? any hint will be helpfull .the fragment will not get the data untill the user click on the list thats the main thing .Using the same bundle way i am able to send the data to other fragment here the initial value is null how i can fix this.

推荐答案

我使用直接方式,而不是间接传递数据,并且在服务中设置了这样的方式

Instead of passing data indirectly i used the direct way and i set like this in service

 Intent intent = new Intent();
    intent.setAction(MY_ACTION);

    intent.putExtra("DATAPASSED", activeAudio.getTitle());
    intent.putExtra("ALBUM_DATA",activeAudio.getAlbum());
    sendBroadcast(intent);

在我的片段中

 @Override
public void onStart() {
    super.onStart();


    myReceiver = new MyReceiver();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(MediaService.MY_ACTION);
    getActivity().registerReceiver(myReceiver, intentFilter);

}

private class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub

        String datapa = arg1.getStringExtra("DATAPASSED");
        String datap2 = arg1.getStringExtra("ALBUM_DATA");
        Log.d("TITLE OF SONG", datapa);
        Log.d("ALBUM", datap2);
        textView.setText(datapa);
        textView1.setText(datap2);
    }

}

希望这会有所帮助.

这篇关于将数据从服务传递到片段,得到零点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆