我正在空指针异常,当我尝试按以下程序执行 [英] I am getting null pointer exception when i try to execute below program

查看:150
本文介绍了我正在空指针异常,当我尝试按以下程序执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能有人请帮我在下面的code中的问题。 当我尝试运行低于code,我得到空指针异常,应用程序终止。

但是,当我尝试运行在同一code在Android版本2.3的工作,但是当我试图在Android 4.4系统的它给空指针异常运行此。

 公共类MainActivity扩展ActionBarActivity实现OnClickListener {

搜索栏seek_bar;
公众的SongList songmanager;
公众的ArrayList< HashMap的<字符串,字符串>>的SongList =新的ArrayList< HashMap的<字符串,字符串>>();
的ImageButton play_button,pause_button,stop_button,list_button;
MediaPlayer的播放器;
TextView的text_shown;
处理器seekHandler =新的处理程序(); / **第一次创建活动时调用。 * /
私有静态最后字符串变量= NULL;


@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);

球员=新的MediaPlayer();
songmanager =新的SongList();
的SongList = songmanager.getplaylist();
seek_bar =(搜索栏)findViewById(R.id.seekBar1);
play_button =(的ImageButton)findViewById(R.id.play);
pause_button =(的ImageButton)findViewById(R.id.pause);
stop_button =(的ImageButton)findViewById(R.id.stop);
list_button =(的ImageButton)findViewById(R.id.list);
text_shown =(TextView中)findViewById(R.id.textView1);
play_button.setOnClickListener(本);
pause_button.setOnClickListener(本);
stop_button.setOnClickListener(本);
stop_button.setImageResource(R.drawable.stop_int);
play_button.setImageResource(R.drawable.play_int);
pause_button.setImageResource(R.drawable.pause_int);
list_button.setImageResource(R.drawable.listbtn);

playsong(0);

list_button.setOnClickListener(新OnClickListener(){

    @覆盖
    公共无效的onClick(视图v){
        // TODO自动生成方法存根
        list_button.setImageResource(R.drawable.listbtn_aft);
        意图IN1 =新的意图(getBaseContext(),Playlist.class);
        startActivityForResult(IN1,100);
    }
});

}

公共无效onActivityResult(INT申请code,INT结果code,意图数据){
    list_button.setImageResource(R.drawable.listbtn);
    super.onActivityResult(要求code,因此code,数据);
    如果(结果code == 100){
        INT songnum = data.getExtras()调用getInt(songindex)。
            playsong(songnum);
            player.start();
            play_button.setImageResource(R.drawable.play_aft);
            pause_button.setImageResource(R.drawable.pause_int);
            stop_button.setImageResource(R.drawable.stop_int);
            seek_bar.setMax(player.getDuration());
    }
}

私人无效playsong(INT songnum){
    尝试 {
        player.reset();
        player.setDataSource(Songlist.get(songnum)获得(songname));
        播放器prepare()。
        seek_bar.setProgress(0);
        seek_bar.setMax(100);
        seekUpdation();
    }赶上(IOException异常E){
        // TODO自动生成的catch块
        e.printStackTrace();
    }赶上(的Throwable E){
        // TODO自动生成的catch块
        e.printStackTrace();
    }

}

Runnable运行=新的Runnable(){
@覆盖
公共无效的run(){
    seekUpdation();
}
};
公共无效seekUpdation(){
    seek_bar.setProgress(player.getCurrentPosition());
    seekHandler.postDelayed(运行,1000);
}
公共无效的onDestroy(){
    player.stop();
    player.release();
    Log.d(TAG,玩家砸);
    super.onDestroy();
}
@覆盖
公共无效的onClick(视图查看){
开关(view.getId()){
案例R.id.play:
    text_shown.setText(打......);
    player.start();
    pause_button.setImageResource(R.drawable.pause_int);
    stop_button.setImageResource(R.drawable.stop_int);
    play_button.setImageResource(R.drawable.play_aft);
    seek_bar.setMax(player.getDuration());
打破;
案例R.id.pause:
    如果(player.isPlaying()){
        player.pause();
        text_shown.setText(暂停......);
        play_button.setImageResource(R.drawable.play_int);
        pause_button.setImageResource(R.drawable.pause_aft);
    }

打破;
案例R.id.stop:
    如果(player.isPlaying()){
        player.stop();
        text_shown.setText(停止...);
        play_button.setImageResource(R.drawable.play_int);
        pause_button.setImageResource(R.drawable.pause_int);
        stop_button.setImageResource(R.drawable.stop_aft);
        。玩家prepareAsync();
        player.seekTo(0);
    }
    其他{
        尝试 {
            播放器prepare()。
            player.seekTo(0);
        }赶上(IllegalStateException异常E){
            // TODO自动生成的catch块
            e.printStackTrace();
        }赶上(IOException异常E){
            // TODO自动生成的catch块
            e.printStackTrace();
        }
    }
打破;
}
}
}



类MP3filter实现了FilenameFilter {
@覆盖
公共布尔接受(文件目录,字符串文件名){
    // TODO自动生成方法存根
    返程(filename.endsWith(MP3));
}
}

公共类的SongList扩展ActionBarActivity {

    公共ArrayAdapter<字符串>广告;
    公众的ArrayList< HashMap的<字符串,字符串>>人=新的ArrayList< HashMap的<字符串,字符串>> ();

    @燮pressLint(SdCardPath)公开最后弦乐SD_CARD =新的String(/ SD卡/);

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        getplaylist();

    }

    公众的ArrayList< HashMap的<字符串,字符串>> getplaylist(){
        // TODO自动生成方法存根
          文件家庭=新的文件(SD_CARD);
            如果(home.listFiles(新MP3filter())长度GT; 0){
                对于(文件文件:home.listFiles(新MP3filter())){
                    HashMap的<字符串,字符串>歌=新的HashMap<字符串,字符串>();
                     song.put(songname,file.getPath());
                     al.add(歌曲);
                }

            }
            返回人;
    }

}
 

的logcat

  08-28 23:18:49.002:E / AndroidRuntime(2118):致命异常:主要
08-28 23:18:49.002:E / AndroidRuntime(2118):工艺:com.example.musicplay,PID:2118
08-28 23:18:49.002:E / AndroidRuntime(2118):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.example.musicplay / com.example.musicplay.MainActivity}:显示java.lang.NullPointerException
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.ActivityThread.access $ 800(ActivityThread.java:135)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.os.Handler.dispatchMessage(Handler.java:102)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.os.Looper.loop(Looper.java:136)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.ActivityThread.main(ActivityThread.java:5017)
08-28 23:18:49.002:E / AndroidRuntime(2118):在java.lang.reflect.Method.invokeNative(本机方法)
08-28 23:18:49.002:E / AndroidRuntime(2118):在java.lang.reflect.Method.invoke(Method.java:515)
08-28 23:18:49.002:E / AndroidRuntime(2118):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
08-28 23:18:49.002:E / AndroidRuntime(2118):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-28 23:18:49.002:E / AndroidRuntime(2118):在dalvik.system.NativeStart.main(本机方法)
08-28 23:18:49.002:E / AndroidRuntime(2118):由:显示java.lang.NullPointerException
08-28 23:18:49.002:E / AndroidRuntime(2118):在com.example.musicplay.Songlist.getplaylist(Songlist.java:39)
08-28 23:18:49.002:E / AndroidRuntime(2118):在com.example.musicplay.MainActivity.onCreate(MainActivity.java:38)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.Activity.performCreate(Activity.java:5231)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-28 23:18:49.002:E / AndroidRuntime(2118):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
08-28 23:18:49.002:E / AndroidRuntime(2118):11 ...更多
 

解决方案

找SD_CARD路径的方法是正确的。

公共最后弦乐SD_CARD =新的String(Environment.getExternalStorageDirectory()getpath());

两件事情你需要做的就是

1.Mention清单中的权限

使用-权限的Andr​​oid:名称=android.permission.READ_EXTERNAL_STORAG​​E

2.Also检查设备是否有外部存储与否。如果是的话那么它是可读或not.To检查它的可用性,你可以按照文件中提到的code。

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Could some one please help me with the issues in the below code. when I try to run the below code, i am getting null pointer exception and the application ends.

But when i try to run the same code in Android version 2.3 its working but when i try to run this in android 4.4 its giving null pointer exception.

public class MainActivity extends ActionBarActivity implements OnClickListener {

SeekBar seek_bar; 
public Songlist songmanager;
public ArrayList<HashMap<String,String>> Songlist = new ArrayList<HashMap<String,String>>();
ImageButton play_button, pause_button, stop_button, list_button; 
MediaPlayer player; 
TextView text_shown; 
Handler seekHandler = new Handler();              /** Called when the activity is first created. */ 
private static final String TAG = null;


@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

player = new MediaPlayer();
songmanager = new Songlist();
Songlist = songmanager.getplaylist();
seek_bar = (SeekBar) findViewById(R.id.seekBar1); 
play_button = (ImageButton) findViewById(R.id.play); 
pause_button = (ImageButton) findViewById(R.id.pause); 
stop_button = (ImageButton)findViewById(R.id.stop);
list_button = (ImageButton) findViewById(R.id.list);
text_shown = (TextView) findViewById(R.id.textView1); 
play_button.setOnClickListener(this); 
pause_button.setOnClickListener(this); 
stop_button.setOnClickListener(this);
stop_button.setImageResource(R.drawable.stop_int);
play_button.setImageResource(R.drawable.play_int);
pause_button.setImageResource(R.drawable.pause_int);
list_button.setImageResource(R.drawable.listbtn);

playsong(0); 

list_button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        list_button.setImageResource(R.drawable.listbtn_aft);
        Intent in1 = new Intent(getBaseContext(),Playlist.class);
        startActivityForResult(in1, 100);   
    }
});

} 

public void onActivityResult(int requestcode, int resultcode, Intent data){
    list_button.setImageResource(R.drawable.listbtn);
    super.onActivityResult(requestcode, resultcode, data);
    if (resultcode == 100){
        int songnum = data.getExtras().getInt("songindex");
            playsong(songnum);
            player.start();
            play_button.setImageResource(R.drawable.play_aft);
            pause_button.setImageResource(R.drawable.pause_int);
            stop_button.setImageResource(R.drawable.stop_int);
            seek_bar.setMax(player.getDuration());
    }
}

private void playsong(int songnum) {
    try {
        player.reset();
        player.setDataSource(Songlist.get(songnum).get("songname"));
        player.prepare();
        seek_bar.setProgress(0);
        seek_bar.setMax(100);
        seekUpdation();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Throwable e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

Runnable run = new Runnable() { 
@Override 
public void run() { 
    seekUpdation(); 
} 
}; 
public void seekUpdation() { 
    seek_bar.setProgress(player.getCurrentPosition()); 
    seekHandler.postDelayed(run, 1000); 
} 
public void onDestroy(){
    player.stop();
    player.release();
    Log.d(TAG, "Player Crushed");
    super.onDestroy();
}    
@Override 
public void onClick(View view) { 
switch (view.getId()) { 
case R.id.play:
    text_shown.setText("Playing..."); 
    player.start();
    pause_button.setImageResource(R.drawable.pause_int);
    stop_button.setImageResource(R.drawable.stop_int);
    play_button.setImageResource(R.drawable.play_aft);
    seek_bar.setMax(player.getDuration());
break; 
case R.id.pause: 
    if(player.isPlaying()){
        player.pause(); 
        text_shown.setText("Paused..."); 
        play_button.setImageResource(R.drawable.play_int);
        pause_button.setImageResource(R.drawable.pause_aft);
    }

break;
case R.id.stop:
    if(player.isPlaying()){
        player.stop();
        text_shown.setText("Stopped...");
        play_button.setImageResource(R.drawable.play_int);
        pause_button.setImageResource(R.drawable.pause_int);
        stop_button.setImageResource(R.drawable.stop_aft);
        player.prepareAsync();
        player.seekTo(0);
    }
    else{
        try {
            player.prepare();
            player.seekTo(0);
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
break;
} 
}
}



class MP3filter implements FilenameFilter{
@Override
public boolean accept(File dir, String filename) {
    // TODO Auto-generated method stub
    return (filename.endsWith(".mp3"));
}
}

public class Songlist extends ActionBarActivity{

    public ArrayAdapter<String> ad;
    public ArrayList<HashMap<String, String>>  al = new ArrayList<HashMap<String, String>> ();

    @SuppressLint("SdCardPath") public final String SD_CARD = new String ("/sdcard/");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getplaylist();

    }

    public ArrayList<HashMap<String, String>> getplaylist() {
        // TODO Auto-generated method stub
          File home = new File(SD_CARD);
            if(home.listFiles(new MP3filter()).length > 0){
                for(File file:home.listFiles(new MP3filter())){
                    HashMap<String, String> song = new HashMap<String, String>();
                     song.put("songname", file.getPath());
                     al.add(song);
                }

            }
            return al;
    }

}

Logcat

08-28 23:18:49.002: E/AndroidRuntime(2118): FATAL EXCEPTION: main
08-28 23:18:49.002: E/AndroidRuntime(2118): Process: com.example.musicplay, PID: 2118
08-28 23:18:49.002: E/AndroidRuntime(2118): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.musicplay/com.example.musicplay.MainActivity}: java.lang.NullPointerException
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.os.Handler.dispatchMessage(Handler.java:102)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.os.Looper.loop(Looper.java:136)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.main(ActivityThread.java:5017)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at java.lang.reflect.Method.invokeNative(Native Method)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at java.lang.reflect.Method.invoke(Method.java:515)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at dalvik.system.NativeStart.main(Native Method)
08-28 23:18:49.002: E/AndroidRuntime(2118): Caused by: java.lang.NullPointerException
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.example.musicplay.Songlist.getplaylist(Songlist.java:39)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.example.musicplay.MainActivity.onCreate(MainActivity.java:38)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.Activity.performCreate(Activity.java:5231)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
08-28 23:18:49.002: E/AndroidRuntime(2118):     ... 11 more

解决方案

The method to find path of SD_CARD is correct

public final String SD_CARD = new String (Environment.getExternalStorageDirectory().getpath());

Two things you have to do is

1.Mention the permission in the manifest

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"

2.Also check whether devices has External Storage or not. If yes then it is readable or not.To check it's availability you can follow the code mentioned in the documentation.

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

这篇关于我正在空指针异常,当我尝试按以下程序执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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