Java 在Android项目中更改了包名,现在什么都不起作用,并且返回空指针错误
我在Eclipse中使用重构更改了一个Android项目的包名,之后我的项目将在Eclipse中编译并在我的手机上运行。然而,当我将其导出为.apk文件时,它不再工作,并且总是立即崩溃 这是它崩溃时返回的错误:Java 在Android项目中更改了包名,现在什么都不起作用,并且返回空指针错误,java,android,eclipse,Java,Android,Eclipse,我在Eclipse中使用重构更改了一个Android项目的包名,之后我的项目将在Eclipse中编译并在我的手机上运行。然而,当我将其导出为.apk文件时,它不再工作,并且总是立即崩溃 这是它崩溃时返回的错误: java.lang.RuntimeException: Unable to instantiate service com.johntcompas.audio_live_wallpaper.AudioWallpaperService: java.lang.NullPointerExce
java.lang.RuntimeException: Unable to instantiate service com.johntcompas.audio_live_wallpaper.AudioWallpaperService: java.lang.NullPointerException
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2556)
at android.app.ActivityThread.access$1800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.johntcompas.audio_live_wallpaper.AudioWallpaperService.<init>(AudioWallpaperService.java:37)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2553)
... 10 more
java.lang.RuntimeException:无法实例化服务com.johntcompas.audio\u live\u wallper.audiowallper服务:java.lang.NullPointerException
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:2556)
在android.app.ActivityThread.access$1800(ActivityThread.java:135)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5017)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
在com.johntcompas.audio\u live\u wallpaper.audiowallparservice.(audiowallparservice.java:37)
位于java.lang.Class.newInstanceImpl(本机方法)
位于java.lang.Class.newInstance(Class.java:1208)
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:2553)
... 10多
这是我的java类:
package com.johntcompas.audio_live_wallpaper;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.util.DisplayMetrics;
import android.view.SurfaceHolder;
import android.view.WindowManager;
import android.media.AudioRecord ;
import android.media.AudioFormat ;
import android.media.MediaRecorder.AudioSource;
public class AudioWallpaperService extends WallpaperService
{
public AudioWallpaperService() {
super() ;
}
@Override
public void onCreate()
{
super.onCreate();
colordelemiter = 255/800 ;
exagger = (float) 0.08;
defaultRaduiis = 850 ;
on = pastRadii.size()-1 ;
colorMult = 20;
circleNum = 8;
}
static int bufferSize ;
static AudioRecord recorder ;
static ArrayList<float[]> pastRadii ;
static float cosValues[] ;
static float sinValues[] ;
static ArrayList<Integer> circleEmphasis ;
static float scalarValues[] ;
static float scalarValuesNEXT[] ;
static Paint p ;
static int circleNum ;
static int colorMult ;
static int on ;
static float colordelemiter ;
static boolean firstdraw = true;
static int defaultRaduiis ;
static float exagger ;
static int centerX ;
static int centerY ;
static int width;
static int size ;
static int height;
static float[] radiiMaxValues;
public static void releaseAudio() {
if (recorder != null) {
recorder.stop() ;
recorder.release() ;
recorder = null ;
}
}
public static void captureAudio() {
if (recorder == null) {
bufferSize = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize*10);
recorder.startRecording();
}
}
@Override
public void onDestroy()
{
super.onDestroy();
}
@Override
public Engine onCreateEngine()
{
return new AudioWallpaperEngine();
}
class AudioWallpaperEngine extends Engine
{
private final Handler handler = new Handler();
private final Runnable drawRunner = new Runnable() {
@Override
public void run() {
draw();
}
};
private boolean visible = true;
AudioWallpaperEngine()
{
p = new Paint(Paint.ANTI_ALIAS_FLAG) ;
p.setColor(Color.BLUE);
bufferSize = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize*10);
pastRadii = new ArrayList<float[]>() ;
recorder.startRecording();
radiiMaxValues = new float[bufferSize/4] ;
float deltaAngle = (float) (8*Math.PI/ bufferSize) ;
size = (bufferSize - 1)/4;
circleEmphasis = new ArrayList<Integer> () ;
scalarValues = new float[circleNum] ;
scalarValuesNEXT = new float[circleNum] ;
for (int i = circleNum-1 ; i >= 0 ; i-- ) {
scalarValues[i] = (float)Math.pow(.80,i);
scalarValuesNEXT[i] = scalarValues[i]*.95f ;
}
cosValues = new float[bufferSize/4] ;
sinValues = new float[bufferSize/4] ;
for (int i = 0 ; i < bufferSize/4 ; i++) {
cosValues[i] = (float)Math.cos(deltaAngle*i) ;
sinValues[i] = (float)Math.sin(deltaAngle*i) ;
}
}
public void onCreate(SurfaceHolder surfaceHolder)
{
super.onCreate(surfaceHolder);
height = surfaceHolder.getSurfaceFrame().top/2 ;
width = surfaceHolder.getSurfaceFrame().left/2 ;
}
@Override
public void onVisibilityChanged(boolean visible)
{
this.visible = visible;
if (visible)
{
handler.post(drawRunner);
}
else
{
handler.removeCallbacks(drawRunner);
releaseAudio() ;
}
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder)
{
super.onSurfaceDestroyed(holder);
this.visible = false;
handler.removeCallbacks(drawRunner);
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels)
{
draw();
}
short[] buffer ;
void draw()
{
buffer = new short[bufferSize] ;
if (recorder != null) {
bufferSize = recorder.read(buffer,0,buffer.length);
} else {
// need to get recorder
captureAudio() ;
bufferSize = recorder.read(buffer,0,buffer.length);
}
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try
{
c = holder.lockCanvas();
c.drawColor(Color.BLACK);
if (c != null)
{
float total = 0 ;
float currentRadii[] = new float[size] ;
for(int i = 0; i < size; i++)
{
currentRadii[i] = buffer[i]*exagger+defaultRaduiis ;
total += Math.abs(buffer[i]) ;
}
total /= (size) ;
int currentColor = (int)(colordelemiter*total) ;
pastRadii.add(currentRadii) ;
circleEmphasis.add(currentColor) ;
float scalarRad ;
float scalarRadPlus ;
float rad[]= new float [size];
colorMult = 205 / (on+1) ;
for (int i = on ; i >= 0 ; i-- ) {
rad = pastRadii.get(i) ;
p.setARGB(255, circleEmphasis.get(i), 0, colorMult*i+50) ;
p.setStrokeWidth((float) (scalarValues[i]*10f+1f)) ;
for(int f = 0; f < size-2; f+=2)
{
scalarRad = rad[f]*scalarValues[i];
//if
scalarRadPlus = rad[f+1]*scalarValues[i] ;
c.drawLine(cosValues[f]*scalarRad + width, sinValues[f]*scalarRad + height, cosValues[f+1]*scalarRadPlus + width, sinValues[f+1]*scalarRadPlus + height, p) ;
}
c.drawLine(cosValues[size-2]*rad[size-2]*scalarValues[i] + width, sinValues[size-2]*rad[size-2]*scalarValues[i] + height, cosValues[0]*rad[0]*scalarValues[i] + width, sinValues[0]*rad[0]*scalarValues[i] + height, p) ;
}
if (pastRadii.size() >= circleNum) {
pastRadii.remove(0) ;
circleEmphasis.remove(0) ;
}
}
}
finally
{
if (c != null)
holder.unlockCanvasAndPost(c);
}
handler.removeCallbacks(drawRunner);
if (visible)
{
handler.postDelayed(drawRunner, 10);
}
}
}
package com.johntcompas.audio\u live\u壁纸;
导入java.util.ArrayList;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.os.Handler;
导入android.service.wallpar.wallperservice;
导入android.util.DisplayMetrics;
导入android.view.SurfaceHolder;
导入android.view.WindowManager;
导入android.media.AudioRecord;
导入android.media.AudioFormat;
导入android.media.MediaRecorder.AudioSource;
公共类AudioWallperService扩展了WallperService
{
公共音频服务(){
超级();
}
@凌驾
public void onCreate()
{
super.onCreate();
colordelemiter=255/800;
夸张=(浮动)0.08;
DefaultRaduis=850;
on=pastRadii.size()-1;
colorMult=20;
圈数=8;
}
静态int缓冲区大小;
静态录音机;
静态阵列列表半径;
静态浮点值[];
静态浮点数[];
静态ArrayList环状强化;
静态浮点ScalarValue[];
静态浮点标度值Next[];
静电涂料p;
静态内环;
静态int-colorMult;
静态int-on;
静态浮色除色剂;
静态布尔值firstdraw=true;
静态int-defaultraduis;
静态浮动放大;
静态int centerX;
静态int中心;
静态整数宽度;
静态整数大小;
静态内高度;
静态浮动[]半径最大值;
公共静态无效释放音频(){
if(记录器!=null){
录音机。停止();
记录器。释放();
记录器=空;
}
}
公共静态无效captureAudio(){
如果(记录器==null){
bufferSize=AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL,单声道,AudioFormat.ENCODING,PCM,16位);
记录器=新的音频记录(AudioSource.MIC,8000,AudioFormat.CHANNEL,单声道,AudioFormat.ENCODING,PCM,16位,bufferSize*10);
记录器。开始记录();
}
}
@凌驾
公共空间
{
super.ondestory();
}
@凌驾
公共引擎onCreateEngine()
{
返回新引擎();
}
类引擎扩展引擎
{
私有最终处理程序=新处理程序();
private final Runnable drawRunner=新Runnable(){
@凌驾
公开募捐{
draw();
}
};
私有布尔可见=真;
音频引擎()
{
p=新油漆(油漆。防漆别名标志);
p、 setColor(Color.BLUE);
bufferSize=AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL,单声道,AudioFormat.ENCODING,PCM,16位);
记录器=新的音频记录(AudioSource.MIC,8000,AudioFormat.CHANNEL,单声道,AudioFormat.ENCODING,PCM,16位,bufferSize*10);
pastRadii=新的ArrayList();
记录器。开始记录();
RadiMaxValues=新浮点[bufferSize/4];
float deltaAngle=(float)(8*Math.PI/bufferSize);
大小=(缓冲大小-1)/4;
circleEmphasis=newArrayList();
scalarValues=新浮点[circleNum];
scalarValuesNEXT=新浮点[circleNum];
对于(int i=circleNum-1;i>=0;i--){
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.johntcompas.audio_live_wallpaper"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="13"
android:targetSdkVersion="16" />
<uses-feature
android:name="android.software.live_wallpaper"
android:required="true" >
</uses-feature>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/wallpaper_description"
android:theme="@style/AppTheme"
android:permission="android.permission.RECORD_AUDIO">
<service
android:name="com.johntcompas.audio_live_wallpaper.AudioWallpaperService"
android:enabled="true"
android:label="Audio Wallpaper"
android:permission="android.permission.BIND_WALLPAPER"
>
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" >
</action>
</intent-filter>
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/wallpaper" >
</meta-data>
</service>
</application>
</manifest>