0

我剛開javalang空指針錯誤logcat的,但它並不顯示行的地方是,我無法弄清楚哪裏是NullPointerException異常..如何解決java lang nullpointer?

這裏是我的MainActivity.java:

package com.orar.cngcnasaud; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.graphics.Color; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.util.Log; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListView; 

public class MainActivity extends Activity implements OnClickListener { 

    private ListView mDrawerList; 
    private DrawerLayout mDrawer; 
    private CustomActionBarDrawerToggle mDrawerToggle; 
    private String[] menuItems; 


    private static final String TAG = "AudioDemo"; 
    private static final String isPlaying = "Media is Playing"; 
    private static final String notPlaying = "Media has stopped Playing"; 

    MediaPlayer player; 
    Button playerButton; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_drawer); 


     player.setLooping(false); // Set looping 

     // Get the button from the view 
     playerButton = (Button) this.findViewById(R.id.buttonmp); 
     playerButton.setText(R.string.play_label); 
     playerButton.setTextColor(Color.WHITE); 
     playerButton.setOnClickListener((OnClickListener) this); 



     player = MediaPlayer.create(this, R.raw.gc); 



     // enable ActionBar app icon to behave as action to toggle nav drawer 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

     // set a custom shadow that overlays the main content when the drawer 
     // opens 
     mDrawer.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

     _initMenu(); 
     mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer); 
     mDrawer.setDrawerListener(mDrawerToggle); 
    } 

     public void onClick(View v) { 
      Log.d(TAG, "onClick: " + v); 
      if (v.getId() == R.id.buttonmp) { 
       playPause(); 
      } 

    } 




    private void demoPause() { 
     // TODO Auto-generated method stub 
     player.pause(); 
     playerButton.setText(R.string.play_label); 

     Log.d(TAG, notPlaying); 
} 

    private void playPause() { 
     // TODO Auto-generated method stub 
     if(player.isPlaying()) { 
      demoPause(); 
     } else { 
      demoPlay(); 
     } 
    } 

    private void demoPlay() { 
     // TODO Auto-generated method stub 
     player.start(); 
     playerButton.setText(R.string.stop_label); 

     Log.d(TAG, isPlaying); 
} 




    private void _initMenu() { 
     NsMenuAdapter mAdapter = new NsMenuAdapter(this); 

     // Add Header 
     mAdapter.addHeader(R.string.ns_menu_main_header); 

     // Add first block 

     menuItems = getResources().getStringArray(
       R.array.ns_menu_items); 
     String[] menuItemsIcon = getResources().getStringArray(
       R.array.ns_menu_items_icon); 

     int res = 0; 
     for (String item : menuItems) { 

      int id_title = getResources().getIdentifier(item, "string", 
        this.getPackageName()); 
      int id_icon = getResources().getIdentifier(menuItemsIcon[res], 
        "drawable", this.getPackageName()); 

      NsMenuItemModel mItem = new NsMenuItemModel(id_title, id_icon); 
      if (res==1) mItem.counter=0; //it is just an example... 
      if (res==3) mItem.counter=0; //it is just an example... 
      mAdapter.addItem(mItem); 
      res++; 
     } 



     mDrawerList = (ListView) findViewById(R.id.drawer); 
     if (mDrawerList != null) 
      mDrawerList.setAdapter(mAdapter); 

     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     // Sync the toggle state after onRestoreInstanceState has occurred. 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 




    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     /* 
     * The action bar home/up should open or close the drawer. 
     * ActionBarDrawerToggle will take care of this. 
     */ 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     // Handle your other action bar items... 
     return super.onOptionsItemSelected(item); 
    } 

    private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle { 

     public CustomActionBarDrawerToggle(Activity mActivity,DrawerLayout mDrawerLayout){ 
      super(
       mActivity, 
       mDrawerLayout, 
       R.drawable.ic_drawer, 
       R.string.ns_menu_open, 
       R.string.ns_menu_close); 
     } 

     @Override 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle(getString(R.string.ns_menu_close)); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle(getString(R.string.ns_menu_open)); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    } 

    private class DrawerItemClickListener implements ListView.OnItemClickListener { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      mDrawerList.setItemChecked(position, true);   
      mDrawer.closeDrawer(mDrawerList); 
      if (position == 1) { 
       Intent intent = new Intent(MainActivity.this, Istoric.class); 
       startActivity(intent); 
       mDrawer.closeDrawers(); 
      } 
      else if (position == 2) { 
       Intent intent2 = new Intent(MainActivity.this, Profesori.class); 
       startActivity(intent2); 
       mDrawer.closeDrawers(); 
      } 
      if (position == 3) { 
       Intent intent3 = new Intent(MainActivity.this, Elevi.class); 
       startActivity(intent3); 
       mDrawer.closeDrawers(); 
      } 
      if (position == 4) { 
       Intent intent4 = new Intent(MainActivity.this, ShowImageActivity.class); 
       startActivity(intent4); 
       mDrawer.closeDrawers(); 
      } 

      if (position == 5) { 
       Intent intent5 = new Intent(MainActivity.this, Despre.class); 
       startActivity(intent5); 
       mDrawer.closeDrawers(); 
      } 
      if (position == 6) { 
       Intent intent6 = new Intent(MainActivity.this, Feedback.class); 
       startActivity(intent6); 
       mDrawer.closeDrawers(); 
      } 

     } 



    } 
     } 

這裏是logcat的:

02-25 21:06:55.414: E/AndroidRuntime(1136): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.orar.cngcnasaud/com.orar.cngcnasaud.MainActivity}: java.lang.NullPointerException 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.os.Looper.loop(Looper.java:137) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at dalvik.system.NativeStart.main(Native Method) 
02-25 21:06:55.414: E/AndroidRuntime(1136): Caused by: java.lang.NullPointerException 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at com.orar.cngcnasaud.MainActivity.onCreate(MainActivity.java:40) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.Activity.performCreate(Activity.java:5104) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
02-25 21:06:55.414: E/AndroidRuntime(1136):  ... 11 more 

請幫忙非常感謝!

回答

2

在你的onCreate()

player.setLooping(false); // Set looping 

使用播放器的對象,但它是空的。您需要先創建一個實例,但你後

player = MediaPlayer.create(this, R.raw.gc); 

就移動最後一行,並setLooping()行之前設置它創建它。

+0

你是最好的..它的工作。非常感謝 ! – Ezekiel

1

的錯誤是:

Caused by: java.lang.NullPointerException 
E/AndroidRuntime(1136):  at com.orar.cngcnasaud.MainActivity.onCreate(MainActivity.java:40) 

您使用的是40行無論對象爲空。

+0

你是最好的..它的工作。非常感謝 ! – Ezekiel

相關問題