繁体   English   中英

Android-空指针异常

[英]Android - Null Pointer Exception

我陷入了尝试从另一个类调用方法的问题(当我从此类调用方法时,除NullPointerException静态函数外,我都崩溃了。我目前调用render.Update()并获取一个-> http://pastebin.com/njjxDiQZ的 logcat输出

11-26 17:14:40.532: E/MediaPlayer(29755): Should have subtitle controller already set
11-26 17:14:40.752: E/AndroidRuntime(29755): FATAL EXCEPTION: main
11-26 17:14:40.752: E/AndroidRuntime(29755): Process: com.coursework.courseworkapp, PID: 29755
11-26 17:14:40.752: E/AndroidRuntime(29755): java.lang.NullPointerException
11-26 17:14:40.752: E/AndroidRuntime(29755):    at com.coursework.courseworkapp.Visual.updateVisualizer(Visual.java:73)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at com.coursework.courseworkapp.Visual$1.onWaveFormDataCapture(Visual.java:48)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at android.media.audiofx.Visualizer$NativeEventHandler.handleCaptureMessage(Visualizer.java:669)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at android.media.audiofx.Visualizer$NativeEventHandler.handleMessage(Visualizer.java:700)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at android.os.Handler.dispatchMessage(Handler.java:102)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at android.os.Looper.loop(Looper.java:137)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at android.app.ActivityThread.main(ActivityThread.java:4998)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at java.lang.reflect.Method.invokeNative(Native Method)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at java.lang.reflect.Method.invoke(Method.java:515)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
11-26 17:14:40.752: E/AndroidRuntime(29755):    at dalvik.system.NativeStart.main(Native Method)

任何帮助将不胜感激,我真的在这里难过。

头等舱

package com.coursework.courseworkapp;

import java.util.Set;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.media.MediaPlayer;
import android.media.audiofx.Visualizer;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;

public class Visual{
byte[] fft;
byte[] mFFTBytes;
byte[] mBytes;
private Visualizer mVisualizer;
Render render;
private Rect mRect = new Rect();

private Paint mFlashPaint = new Paint();
private Paint mFadePaint = new Paint();

Bitmap mCanvasBitmap;
Canvas mCanvas;



public int Test(MediaPlayer player){

    mVisualizer = new Visualizer(player.getAudioSessionId());
    mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
    Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener()
    {
      @Override
      public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
          int samplingRate)
      {
          updateVisualizer(bytes);

      }

      @Override
      public void onFftDataCapture(Visualizer visualizer, byte[] bytes,
          int samplingRate)
      {
        updateVisualizerFFT(bytes);

      }
    };

    mVisualizer.setDataCaptureListener(captureListener, Visualizer.getMaxCaptureRate() / 2, true, true);
    mVisualizer.setEnabled(true);



    return player.getAudioSessionId();

}

public void updateVisualizer(byte[] bytes) {
        mBytes = bytes;
    }


public void updateVisualizerFFT(byte[] bytes) {
    mFFTBytes = bytes;
        render.Update();
        //render.invalidate()           
    }

    public byte[] getFFT(){
        return mFFTBytes;  
    }
}

渲染类

package com.coursework.courseworkapp;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.media.audiofx.Visualizer;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class Render extends View {

public Render(Context context) {
    super(context);
    setMinimumWidth(800);
    setMinimumHeight(1000);
    setFocusable(true);
}

public void Update(){
    //Will have code here after fix crash.

}
protected void onDraw(Canvas canvas){           
    canvas.drawColor(Color.RED);        
    //Will add more code here.
}
}

MainActivity.Java-如何启动Visualise.java

public class MainActivity extends Activity {

private MediaPlayer mPlayer;
Visual visualize = new Visual();
Render render;


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


    render = new Render(this);
    ((LinearLayout) findViewById(R.id.root)).addView(render, 0);

    //Log.d("Freq", "test");
    mPlayer = MediaPlayer.create(this, R.raw.test2);
    mPlayer.setLooping(true);
    mPlayer.start();
    //Log.d("Freq", "test");
    Handler handler = new Handler();
    Runnable runnable = new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub
            int i = visualize.Test(mPlayer);
            //render.invalidate();


        }
    };
    handler.postDelayed(runnable, 100);

    /*byte[] fft = visualize.getFFT();
    if(fft != null){
        Toast.makeText(this,"yey",Toast.LENGTH_LONG).show();
    }
    else{
        Toast.makeText(this,"nope",Toast.LENGTH_LONG).show();

    }*/

    /* THis part didn't work, Why? Check the other example */
    //Log.w("Freq", String.valueOf(fft.length));
    /*for(int i = 0; i < fft.length; i++){
        String s = new String();
        Log.w("Freq", String.valueOf(fft[i]));

    }*/
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void tryDraw(){
    //render.Update();
}

}

您的视觉课不会扩展Activtiy。 但是你有

 render = new Render(this);

this不涉及活动上下文。

另外,您也不会在视觉类中((LinearLayout) findViewById(R.id.root)).addView(render, 0);任何布局((LinearLayout) findViewById(R.id.root)).addView(render, 0); 会给你NullPointerException

findViewById查找具有当前膨胀布局中提到的ID的视图。

您声明Render render; 但不要初始化它只有在渲染为静态时才能执行此操作,请修复该问题

视觉:

public class Visual {

Context mContext;

// constructor
public Visual(Context context){
    this.mContext = context;
    }

....

public void updateVisualizerFFT(byte[] bytes) {
    mFFTBytes = bytes;
        //Don't forget to initialize redender
        Render render = new Render(this.mContext);
        render.Update();
        //render.invalidate()           
    }
}

渲染:

public class Render extends View {

public Render(Context context) {
    super(context);
    setMinimumWidth(800);
    setMinimumHeight(1000);
    setFocusable(true);
}

}

主要活动 :

您应该能够运行

int i = visualize.Test(mPlayer);

阅读上下文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM