繁体   English   中英

Android Flash Light小部件代码崩溃

[英]Android Flash Light widget code crashing

有人可以解释我为什么我的代码崩溃了..

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);
    }

  }
} 

有人可以帮我解决这个问题吗...

您的代码中至少有两个明显的问题。

您的电话:

if(camera!=null) camera=Camera.open();

...初始化您的Camera对象,如果它不为null (听起来很奇怪-可能永远不会初始化)。

但是下面的所有代码,包括:

Camera.Parameters p = camera.getParameters();

... 依赖于一个事实,即camera != 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
}

暂无
暂无

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

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