嗨我目前在我的Android媒体播放器项目工作,一切都很好,但后来我改变了布局设计,现在我每次启动时都得到java.nullpointerexception,我已经搜索到了无处不在的答案,但我所做的一切都不起作用..任何人都可以帮我吗?
这里是layout.xml
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:tools="http://schemas.androID.com/tools"androID:ID="@+ID/relativeLayout1"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"androID:background="#000000"androID:orIEntation="vertical" ><Seekbar androID:ID="@+ID/sbSong" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:layout_alignParentleft="true" androID:layout_marginBottom="72dp" /><Imagebutton androID:ID="@+ID/btnNext" androID:contentDescription="@string/Next" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:layout_alignParentRight="true" androID:src="@drawable/next" /><Imagebutton androID:ID="@+ID/btnBack" androID:contentDescription="@string/PrevIoUs" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:layout_alignParentleft="true" androID:src="@drawable/prevIoUs" /><Imagebutton androID:ID="@+ID/btnPlay" androID:contentDescription="@string/btnPlay" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:layout_centerHorizontal="true" androID:src="@drawable/play" /><Imagebutton androID:ID="@+ID/btnShuffle" androID:contentDescription="@string/shuffleOn" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_above="@+ID/sbSong" androID:layout_alignParentRight="true" androID:src="@drawable/shuffle_off" /><Imagebutton androID:ID="@+ID/btnRepeat" androID:contentDescription="@string/repeatOn" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_above="@+ID/sbSong" androID:layout_alignParentleft="true" androID:src="@drawable/repeat_off" /><TextVIEw androID:ID="@+ID/txtDuration" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignBottom="@+ID/btnShuffle" androID:layout_toleftOf="@+ID/btnShuffle" androID:text="TextVIEw" /><TextVIEw androID:ID="@+ID/txtCurrentposition" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignBottom="@+ID/btnRepeat" androID:layout_toRightOf="@+ID/btnRepeat" androID:text="TextVIEw" /><ImageVIEw androID:ID="@+ID/albumartwork" androID:contentDescription="@string/noSong" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_above="@+ID/btnShuffle" androID:layout_centerHorizontal="true" androID:layout_marginBottom="66dp" androID:src="@drawable/noartwork" /><TextVIEw androID:ID="@+ID/txtSongTitle" androID:layout_wIDth="wrap_content" androID:layout_height="40dp" androID:layout_alignParentleft="true" androID:layout_alignParentRight="true" androID:layout_alignParenttop="true" androID:text="Medium Text" androID:textAppearance="?androID:attr/textAppearanceMedium" /><Imagebutton androID:ID="@+ID/btnPlay@R_502_6818@" androID:contentDescription="@string/Song@R_502_6818@" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignParentleft="true" androID:layout_alignParenttop="true" androID:src="@drawable/dropdown" /><@R_502_6818@VIEw androID:ID="@+ID/lstSongs" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_alignParentleft="true" androID:visibility="invisible" androID:layout_below="@+ID/txtSongTitle" ></@R_502_6818@VIEw><EditText androID:ID="@+ID/searchBox" androID:visibility="invisible" androID:layout_height="wrap_content" androID:layout_wIDth="match_parent" androID:layout_alignParentRight="true" androID:layout_alignParenttop="true" androID:layout_toRightOf="@+ID/btnPlay@R_502_6818@" androID:ems="10" > <requestFocus /></EditText></relativeLayout>
– 和.java
包com.example.player;
import java.util.Array@R_502_6818@;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Random;import java.util.concurrent.Executors;import java.util.concurrent.scheduledexecutorservice;import java.util.concurrent.TimeUnit;import com.example.player.R;import androID.media.MediaMetadataRetrIEver;import androID.media.MediaPlayer;import androID.media.MediaPlayer.OnCompletion@R_502_6818@ener;import androID.os.Bundle;import androID.os.Handler;import androID.os.Message;import androID.provIDer.MediaStore;import androID.annotation.Suppresslint;import androID.annotation.TargetAPI;import androID.app.Activity;import androID.content.pm.ActivityInfo;import androID.database.Cursor;import androID.graphics.Bitmap;import androID.graphics.BitmapFactory;import androID.text.Editable;import androID.text.TextWatcher;import androID.util.Log;import androID.vIEw.Menu;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClick@R_502_6818@ener;import androID.vIEw.VIEw.Ontouch@R_502_6818@ener;import androID.Widget.AdapterVIEw;import androID.Widget.AdapterVIEw.OnItemClick@R_502_6818@ener;import androID.Widget.EditText;import androID.Widget.Imagebutton;import androID.Widget.ImageVIEw;import androID.Widget.listadapter;import androID.Widget.@R_502_6818@VIEw;import androID.Widget.Seekbar;import androID.Widget.SimpleAdapter;import androID.Widget.TextVIEw;public class MainActivity extends Activity implements OnCompletion@R_502_6818@ener {//Declaration de variable globale//buttonprivate Imagebutton btnPlayPause;private Imagebutton btnShuffle;private Imagebutton btnRepeat;private Imagebutton btnNext;private Imagebutton btnBack;private Imagebutton btnSong@R_502_6818@;private Seekbar songbar;private TextVIEw txtTitle;private TextVIEw txtCurrentTime;private TextVIEw txtDuration;private @R_502_6818@VIEw lstSongs;private ImageVIEw cover;private EditText searchBox;//Variableprivate boolean isShuffle = false;private boolean isRepeat = false;private boolean isVisible = false;private String minutes = "";private String seconds = "";private int textlength = 0;private Array@R_502_6818@<HashMap<String,String>> songs_sort = new Array@R_502_6818@<HashMap<String,String>>();@Suppresslint("SdCardpath")private String SDCARD ="/sdcard/";//MediaPlayerprivate MediaPlayer mp;private int songIndex = 0;//Songspublic Array@R_502_6818@<HashMap<String, String>> songs = new Array@R_502_6818@<HashMap<String, String>>();//Handler de la seekbarprivate final Handler handler = new Handler();//Au load de l'Activity@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); initialise();}private voID initialise(){ //MediaPlayer mp = new MediaPlayer(); //Dont Move Screen setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //findVIEwByID btnPlayPause = (Imagebutton) findVIEwByID(R.ID.btnPlay); btnShuffle = (Imagebutton) findVIEwByID(R.ID.btnShuffle); btnRepeat = (Imagebutton) findVIEwByID(R.ID.btnRepeat); btnNext = (Imagebutton) findVIEwByID(R.ID.btnNext); btnBack = (Imagebutton) findVIEwByID(R.ID.btnBack); txtTitle = (TextVIEw) findVIEwByID(R.ID.txtSongTitle); txtCurrentTime = (TextVIEw) findVIEwByID(R.ID.txtCurrentposition); txtDuration = (TextVIEw) findVIEwByID(R.ID.txtDuration); lstSongs = (@R_502_6818@VIEw) findVIEwByID(R.ID.lstSongs); songbar = (Seekbar) findVIEwByID(R.ID.sbSong); cover = (ImageVIEw) findVIEwByID(R.ID.albumartwork); searchBox = (EditText) findVIEwByID(R.ID.searchBox); //set les @R_502_6818@ener btnPlayPause.setonClick@R_502_6818@ener(new OnClick@R_502_6818@ener() {@OverrIDe public voID onClick(VIEw v) {playPause();}}); btnShuffle.setonClick@R_502_6818@ener(new OnClick@R_502_6818@ener() {@OverrIDe public voID onClick(VIEw v) {shuffle();}}); btnRepeat.setonClick@R_502_6818@ener(new OnClick@R_502_6818@ener() {@OverrIDe public voID onClick(VIEw v) {repeat();}}); btnNext.setonClick@R_502_6818@ener(new OnClick@R_502_6818@ener(){@OverrIDe public voID onClick(VIEw v) {next();}}); btnBack.setonClick@R_502_6818@ener(new OnClick@R_502_6818@ener(){@OverrIDe public voID onClick(VIEw v) {back();}}); btnSong@[email protected]@R_502_6818@ener(new OnClick@R_502_6818@ener(){@OverrIDe public voID onClick(VIEw v) {visible();}}); searchBox.addTextChanged@R_502_6818@ener(new TextWatcher(){ public voID afterTextChanged(Editable et) { } @OverrIDe public voID beforeTextChanged(CharSequence chars, int start, int count, int after) { // Todo auto-generated method stub } @OverrIDe public voID onTextChanged(CharSequence chars, int start, int count,int after) { // Todo auto-generated method stub textlength = searchBox.getText().length(); if(textlength > 0) { songs_sort.clear(); for(int i = 0; i < songs.size();i++) { if(textlength < songs.get(i).get("songTitle").length()) { if(searchBox.getText().toString().equalsIgnoreCase((String) songs.get(i).get("songTitle").subSequence(0, textlength))) { songs_sort.add(songs.get(i)); } } } adapt(songs_sort); } else { createPlay@R_502_6818@(SDCARD); } } }); mp.setonCompletion@R_502_6818@ener(this); songbar.setontouch@R_502_6818@ener(new Ontouch@R_502_6818@ener() {@OverrIDe public boolean ontouch(VIEw v, MotionEvent event) { seekChange(v); return false; } }); //la play@R_502_6818@ createPlay@R_502_6818@(SDCARD);}//rempli la @R_502_6818@vIEw avec les titres de chansonsprivate voID createPlay@R_502_6818@(String dir){ songs.clear(); /*Aller chercher TOUTES les chansons de la sdcard * grâce a un cursor et une db * la db Mediastore est créer par androID pour * stocker tout les informations sur les fichIErs de la sdcard * je pousse le resultat de ma requete dans mon array de chansons * avec un while */ String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; String[] projection = { MediaStore.Audio.Media.Title, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.DATA }; @SuppressWarnings("deprecation") Cursor cursor = this.managedquery( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null); while(cursor.movetoNext()){ HashMap<String,String> song = new HashMap<String,String>(); song.put("songTitle",cursor.getString(0)+"-"+cursor.getString(1)); song.put("songPath",cursor.getString(2) ); songs.add(song); } //j'utilisais ceci avant pour aller chercher les chansons par une boucle de fichIEr/* file root = new file(dir); //loop a travers la carte sd Note: @R_502_6818@files() n'entre pas dans les folders if(root.@R_502_6818@files().length > 0) { for(file file : root.@R_502_6818@files()) { //if(file.isDirectory()) //{ //}else //{ if(file.toString().endsWith(".mp3")) { HashMap<String, String> song = new HashMap<String, String>(); song.put("songTitle", file.getname().substring(0, (file.getname().length() - 4))); song.put("songPath", file.getPath()); songs.add(song); } //} } }*/ //lIEr avec adapter adapt(songs);}private voID adapt(Array@R_502_6818@<HashMap<String,String>> array){ //sort le array@R_502_6818@ Collections.sort(array, new Comparator<HashMap<String,String>>() { @OverrIDe public int compare(HashMap<String, String> lhs, HashMap<String, String> rhs) { // Todo auto-generated method stub return lhs.get("songTitle").comparetoIgnoreCase(rhs.get("songTitle")); } }); //LIEr le array au @R_502_6818@vIEw comme data listadapter adapter = new SimpleAdapter(this, array,R.layout.song_item, new String[] { "songTitle" }, new int[] {R.ID.song }); lstSongs.setAdapter(adapter); lstSongs.setonItemClick@R_502_6818@ener(new OnItemClick@R_502_6818@ener(){ @OverrIDe public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID) { // Todo auto-generated method stub playthis(position); } });}//joue la chanson a l'index selectionnerprivate voID playthis(int position){ songIndex = position; String path = songs.get(songIndex).get("songPath"); Log.w("PLAYER","song path = "+ path); try { mp.reset(); mp.setDataSource(path); mp.prepare(); songbar.setMax(mp.getDuration()); btnPlayPause.setimageResource(R.drawable.pause); txtTitle.setText(songs.get(songIndex).get("songTitle")); txtCurrentTime.setText("0:00"); mp.start(); timer(); progressbar(); getCover(path); } catch (Exception e) { // Todo: handle exception }}//Function PlayPause buttonprivate voID playPause(){ if(mp.isPlaying()){ if(mp!=null){ mp.pause(); // je change l'image du boutton btnPlayPause.setimageResource(R.drawable.play); } }else{ // repartir la chanson if(mp!=null){ mp.start(); // je change l'image du boutton btnPlayPause.setimageResource(R.drawable.pause); } }}//Function next la chansonprivate voID next(){ if(isShuffle) { //sort une chanson random Random rand = new Random(); songIndex = rand.nextInt(songs.size()-1); playthis(songIndex); } else { //check si la chanson qui vIEnt d'être jouer est la dernIEre de la @R_502_6818@e if(songIndex < songs.size()-1) { songIndex = songIndex + 1; playthis(songIndex); } else { //repart avec la premIEre chanson playthis(0); } }}//Function back() lit la chanson précédente ou une autre randomprivate voID back(){ if(isShuffle) { //sort une chanson random Random rand = new Random(); songIndex = rand.nextInt(songs.size()-1); playthis(songIndex); } else { //check si la chanson qui vIEnt d'être jouer est la premIEre de la @R_502_6818@e if(songIndex > 0) { songIndex = songIndex - 1; playthis(songIndex); } else { //joue la dernIEre chanson playthis(songs.size()-1); } }}//Function timer pour le current time of the songprivate voID timer(){ //Duration de la chanson minutes = String.valueOf(mp.getDuration()/60000); seconds = String.valueOf(mp.getDuration() % 60000); seconds = seconds.substring(0, 2); txtDuration.setText(minutes+":"+seconds); scheduledexecutorservice myShedule = Executors.newScheduledThreadPool(1); myShedule.scheduleWithFixedDelay( new Runnable(){ @OverrIDe public voID run() { monitorHandler.sendMessage(monitorHandler.obtainMessage()); }}, 200, //initialDelay 200, //delay TimeUnit.MILliSECONDS); } Handler monitorHandler = new Handler(){ @OverrIDe public voID handleMessage(Message msg) { mediacurrentposition(); } }; //Function mediacurrentposition private voID mediacurrentposition() { if(mp.isPlaying()) { minutes = String.valueOf(mp.getCurrentposition()/60000); seconds = String.valueOf(mp.getCurrentposition() % 60000); //seconds = seconds.substring(0, 2); /*if(Integer.getInteger(seconds) < 10) { seconds = "0"+seconds ; }*/ txtCurrentTime.setText(minutes+":"+seconds); } }//Function seekbar qui suis la chansonprivate voID progressbar(){ songbar.setProgress(mp.getCurrentposition()); if (mp.isPlaying()) { Runnable notification = new Runnable() { public voID run() { progressbar(); } }; handler.postDelayed(notification,1000); }else{ mp.pause(); btnPlayPause.setimageResource(R.drawable.play); songbar.setProgress(mp.getCurrentposition()); }}//partir la chanson ou la seekbar estprivate voID seekChange(VIEw v){ Seekbar sb = (Seekbar)v; if(mp.isPlaying()){ mp.seekTo(sb.getProgress()); } else { mp.seekTo(sb.getProgress()); } timer();}private voID shuffle(){ if(isShuffle) { isShuffle = false; btnShuffle.setimageResource(R.drawable.shuffle_off); }else{ isShuffle = true; btnShuffle.setimageResource(R.drawable.shuffle_on); }}private voID repeat(){ if(isRepeat) { isRepeat = false; btnRepeat.setimageResource(R.drawable.repeat_off); }else{ isRepeat = true; btnRepeat.setimageResource(R.drawable.repeat_on); }}@OverrIDepublic voID onCompletion(MediaPlayer arg0){ if(isRepeat) { //joue la même chanson sur repeat playthis(songIndex); } else if(isShuffle) { //sort une chanson random Random rand = new Random(); songIndex = rand.nextInt(songs.size()-1); playthis(songIndex); } else { //la prochaine chanson suivant la chanson qui vIEnt d'être jouer //check si la chanson qui vIEnt d'être jouer est la dernIEre de la @R_502_6818@e if(songIndex < songs.size()-1) { songIndex = songIndex + 1; playthis(songIndex); } else { //repart avec la premIEre chanson playthis(0); } }}private voID visible(){ if(isVisible) { lstSongs.setVisibility(VIEw.INVISIBLE); searchBox.setVisibility(VIEw.INVISIBLE); isVisible = false; cover.setVisibility(VIEw.VISIBLE); txtCurrentTime.setVisibility(VIEw.VISIBLE); txtDuration.setVisibility(VIEw.VISIBLE); } else { lstSongs.setVisibility(VIEw.VISIBLE); searchBox.setVisibility(VIEw.VISIBLE); isVisible = true; cover.setVisibility(VIEw.INVISIBLE); txtCurrentTime.setVisibility(VIEw.INVISIBLE); txtDuration.setVisibility(VIEw.INVISIBLE); }}@TargetAPI(10)@Suppresslint({ "NewAPI", "NewAPI", "NewAPI" })private voID getCover(String path){ MediaMetadataRetrIEver MetaDataRetriver = new MediaMetadataRetrIEver(); MetaDataRetriver.setDataSource(path); byte[] pic; pic = MetaDataRetriver.getEmbeddedPicture(); if(pic == null) { cover.setimageResource(R.drawable.noartwork); } else { Bitmap bMap; bMap = BitmapFactory.decodeByteArray(pic, 0, pic.length); cover.setimageBitmap(bMap); }}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true;}}
– Logcat
11-30 11:06:28.989: D/AndroIDRuntime(15673): Shutting down VM11-30 11:06:28.989: W/dalvikvm(15673): threadID=1: thread exiting with uncaught exception (group=0x40018578)11-30 11:06:28.999: E/AndroIDRuntime(15673): FATAL EXCEPTION: main11-30 11:06:28.999: E/AndroIDRuntime(15673): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.player/com.example.player.MainActivity}: java.lang.NullPointerException11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:1651)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.app.ActivityThread.access00(ActivityThread.java:117)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:935)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.os.Handler.dispatchMessage(Handler.java:99)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.os.Looper.loop(Looper.java:130)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.app.ActivityThread.main(ActivityThread.java:3687)11-30 11:06:28.999: E/AndroIDRuntime(15673): at java.lang.reflect.Method.invokeNative(Native Method)11-30 11:06:28.999: E/AndroIDRuntime(15673): at java.lang.reflect.Method.invoke(Method.java:507)11-30 11:06:28.999: E/AndroIDRuntime(15673): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)11-30 11:06:28.999: E/AndroIDRuntime(15673): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:625)11-30 11:06:28.999: E/AndroIDRuntime(15673): at dalvik.system.NativeStart.main(Native Method)11-30 11:06:28.999: E/AndroIDRuntime(15673): Caused by: java.lang.NullPointerException11-30 11:06:28.999: E/AndroIDRuntime(15673): at com.example.player.MainActivity.initialise(MainActivity.java:117)11-30 11:06:28.999: E/AndroIDRuntime(15673): at com.example.player.MainActivity.onCreate(MainActivity.java:88)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)11-30 11:06:28.999: E/AndroIDRuntime(15673): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:1615)11-30 11:06:28.999: E/AndroIDRuntime(15673): ... 11 more
好吧,我知道这是很多代码……我一直在研究那个项目,因为我在学校的最后一个项目已经有2个月了,但是现在我仍然坚持这个错误
解决方法:
这一行在这里
btnSong@[email protected]@R_502_6818@ener(new OnClick@R_502_6818@ener(){@OverrIDe public voID onClick(VIEw v) {visible();}});
您从未为此特定视图调用findVIEwByID(),因此指针仍为null.
总结以上是内存溢出为你收集整理的java – findviewbyid上的Android空指针异常全部内容,希望文章能够帮你解决java – findviewbyid上的Android空指针异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)