Java Android Flash Light小部件代码崩溃
有人能解释一下为什么我的代码会在Java Android Flash Light小部件代码崩溃,java,android,flash,widget,Java,Android,Flash,Widget,有人能解释一下为什么我的代码会在 Camera.Parameters p = camera.getParameters(); //crashing line 代码是 package it.elec29a.ultra.flashlight; import java.io.IOException; import java.util.Random; import android.app.PendingIntent; import android.appwidget.AppWidgetManage
Camera.Parameters p = camera.getParameters(); //crashing line
代码是
package it.elec29a.ultra.flashlight;
import java.io.IOException;
import java.util.Random;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
public class MyWidgetProvider extends AppWidgetProvider {
private Camera camera=null;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
PackageManager pm = context.getPackageManager();
// if device support camera?
if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
return;
}
if(camera!=null) camera=Camera.open();
// Get all ids
ComponentName thisWidget = new ComponentName(context,
MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
Log.d("In Widget ",""+widgetId);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.buttonwidget, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
Camera.Parameters p = camera.getParameters(); //crashing line
if(true) return; //for debug exit
String flashMode = p.getFlashMode();
if(flashMode == null) {
//DO something, if it has no value
} else if(flashMode.equals(Camera.Parameters.FLASH_MODE_OFF)) {
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
} else if(flashMode.equals(Camera.Parameters.FLASH_MODE_TORCH)) {
p.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
}
}
}
有人能帮我解决这个问题吗。。。thx代码中至少存在两个可见问题 您的线路:
if(camera!=null) camera=Camera.open();
。。。如果对象不是null
(听起来很奇怪-可能永远不会被初始化),则初始化您的相机
对象
但是,以下所有代码包括:
Camera.Parameters p = camera.getParameters();
。。。不取决于摄像机!=null
,因此它可能引用了一个null
指针
因此,您可能会抛出一个NullPointerException
(我说“可能”,因为您还没有发布堆栈跟踪)
我将更改您的代码,如下所示:
// removed if(camera!=null)
camera = Camera.open();
// checking "camera" is not null
if (camera != null) { // using curly brackets, comes very handy sometimes :D
// ... the rest of the code
}
顺便说一下,调用
getParameters()
时,您的camera
变量也可能是null
,因为您没有在上面的检查null
行中包含该调用。啊,好的,它现在正在工作。。我在回答中增加了一些细节。祝你好运thx新问题和新代码