[英]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.
}
}
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.