MediaPlayer and Fragments - java.lang.IllegalStateException:



我已经设置了一个带有多个选项卡的主活动,可以通过滑动进行导航。因此,每当我滑动到相应的选项卡时,片段都会显示其XML中描述的图像视图,并且此图像视图可以在点击时启用音频播放。

图像视图设置在碎片中.xml具有相应的android:onClick属性。

因此,为简单起见,让我们考虑 1 个片段(钩接到 frag.xml)和 1 个主活动(挂接到主.xml)。

现在,每当我点击图像视图时,该应用程序都不会播放任何声音,但会立即崩溃并显示以下logcat报告:

01-19 15:36:29.211: E/AndroidRuntime(20718): FATAL EXCEPTION: main
01-19 15:36:29.211: E/AndroidRuntime(20718): java.lang.IllegalStateException: Could not execute method of the activity
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.view.View$1.onClick(View.java:3640)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.view.View.performClick(View.java:4247)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.view.View$PerformClick.run(View.java:17728)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.os.Handler.handleCallback(Handler.java:730)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.os.Looper.loop(Looper.java:137)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.app.ActivityThread.main(ActivityThread.java:5289)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at java.lang.reflect.Method.invokeNative(Native Method)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at java.lang.reflect.Method.invoke(Method.java:525)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at dalvik.system.NativeStart.main(Native Method)
01-19 15:36:29.211: E/AndroidRuntime(20718): Caused by: java.lang.reflect.InvocationTargetException
01-19 15:36:29.211: E/AndroidRuntime(20718):    at java.lang.reflect.Method.invokeNative(Native Method)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at java.lang.reflect.Method.invoke(Method.java:525)
01-19 15:36:29.211: E/AndroidRuntime(20718):    at android.view.View$1.onClick(View.java:3635)
01-19 15:36:29.211: E/AndroidRuntime(20718):    ... 11 more
01-19 15:36:29.211: E/AndroidRuntime(20718): Caused by: java.lang.NullPointerException
01-19 15:36:29.211: E/AndroidRuntime(20718):    at com.example.MainActivity.hellofunction(MainActivity.java:63)
01-19 15:36:29.211: E/AndroidRuntime(20718):    ... 14 more
01-19 15:36:30.522: I/Process(20718): Sending signal. PID: 20718 SIG: 9

碎片.xml -

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ScrollyClips"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <RelativeLayout
        android:id="@+id/RelativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="403dp"
        android:layout_marginLeft="1dp"
        android:background="@color/black"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_gravity="right"
            android:src="@drawable/ico" />
        <ImageView
            android:id="@+id/ImageView01"
            android:contentDescription="solhello"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@drawable/ico" 
            android:onClick="hellofunction"/>
    </RelativeLayout>
</ScrollView>

我的Java代码如下 -

主要活动.java :

import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
    public class MainActivity extends FragmentActivity implements ActionBar.TabListener
    {   
                private ViewPager viewPager;
                private TabsPagerAdapter adapter;
                private ActionBar actionbar;
                private String[] tabs={"A"};
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
                    //Initialize
                    viewPager=(ViewPager)findViewById(R.id.pager);
                    actionbar=getActionBar();
                    adapter=new TabsPagerAdapter(getSupportFragmentManager());
                    viewPager.setAdapter(adapter);
                    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
                    //Add tabs
                    for(String tab_name:tabs)
                    {
                        actionbar.addTab(actionbar.newTab().setText(tab_name)
                        .setTabListener(this));
                    }
                }
                @Override
                public void onTabReselected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void onTabSelected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub
                }
    public void hellofunction(View v)
    {   mp.release();
        mp=MediaPlayer.create(this, R.raw.helloworld);
        mp.start();
    }
    }

剪辑片段.java :

import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ClipsFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.frag, container, false);
        return rootView;
    }   
}

我做错了什么?如何解决此问题并使音频播放正常工作?

甚至在初始化之前就调用了 release mp

 mp.release();
 mp=MediaPlayer.create(this, R.raw.helloworld);

编辑:

在片段中

 MediaPlayer mp; 
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.frag, container, false);
    ImageView iv = (ImageView) rootView.findViewById(R.id.ImageView01);
    iv.setOnClickListener(new OnClickListener()
    {
             @Override
             public void onClick(View v)
             {
                     mp=MediaPlayer.create(getActivity(), R.raw.helloworld); 
                     mp.start():  
             } 
    });
    return rootView;
}  

您可以删除android:onClick="hellofunction"

相关内容

最新更新