J'ai le scénario suivant qui tire tout à fait mes cheveux: J'écris une classe pour gérer la caméra Android, ce qui étend l'activité. Dans cette classe j'ai le code ci-dessous. Ce qui se passe est que je reçois toujours exception de point nul --with sa force proche peu friend-- dans la ligne qui dit:Android: startActivityForResult toujours nul et force fermer mon application
startActivityForResult(intent, 0);
Cependant, je reçois System.out.println (« intention non nulle »); imprimé ok dans LogCat ...
Le LogCat dit:
03-08 22:46:38.584: ERROR/AndroidRuntime(1079): java.lang.NullPointerException
03-08 22:46:38.584: ERROR/AndroidRuntime(1079): at android.app.Activity.startActivityForResult(Activity.java:2749)
03-08 22:46:38.584: ERROR/AndroidRuntime(1079): at com.test.cameratest.startCameraActivity(cameratest.java:39)
Dans le manifeste, j'ai:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera"/>
<activity android:name=".cameratest" />
Alors, ce que je fais mal ?? Pourquoi startActivityForResult renvoie toujours null !?
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
/** As per suggestion tried to change the method from protected to private or public
but still have the same problem */
protected void startCameraActivity()
{
String path = (new StringBuilder()).append(Environment.getExternalStorageDirectory()).append("/images/test.jpg").toString();
System.out.println("started");
File file = new File(path);
System.out.println(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra("output", outputFileUri);
/** Removed as per suggestion
if (intent!=null)
{
System.out.println("intent not null");
**startActivityForResult(intent, 0);**
}
*/
**startActivityForResult(intent, 0);** <== null pointer exception
}
ÉDITÉE:
Comme par suggestion, je pris un coup d'œil à la ligne 2749 sur Activity.java du cadre Android et 2.1r2 est le code ici:
public void startActivityForResult(Intent intent, int requestCode) {
if (mParent == null) {
**** Line 2749 is the folowing
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
****
if (ar != null) {
mMainThread.sendActivityResult(
mToken, mEmbeddedID, requestCode, ar.getResultCode(),
ar.getResultData());
}
if (requestCode >= 0) {
// If this start is requesting a result, we can avoid making
// the activity visible until the result is received. Setting
// this code during onCreate(Bundle savedInstanceState) or onResume() will keep the
// activity hidden during this time, to avoid flickering.
// This can only be done when a result is requested because
// that guarantees we will get information back when the
// activity is finished, no matter what happens to it.
mStartedActivity = true;
}
} else {
mParent.startActivityFromChild(this, intent, requestCode);
}
}
ligne 2749 est marqué avec double ** Cependant, je ne vois pas de problème avec ce code
EDITED
oublié d'expliquer comment j'appelle ceci:
cameratest cam = new cameratest();
cam.startCameraActivity();
Puisque vous avez passé 'intent.putExtra (...)', la vérification de 'intent! = Null' est inutile. Ce n'est pas le problème. Je regarde la ligne 2749 de Activity.java pour la version du système d'exploitation que vous utilisez. Cela pourrait fournir un indice. Vous pouvez trouver les sources de cadre [ici] (http://android.git.kernel.org/?p=platform/frameworks/base.git;a=summary) –
Merci Ted, mais je ne vois pas de problème là non plus, ou autant que je sache. J'ai également découvert que, quelle que soit l'activité que je souhaite démarrer, elle me renvoie toujours une erreur d'exception nulle. J'ai essayé avec des bribes pour obtenir les contacts et composer un numéro ... –
Je pense que le problème peut être dû à la méthode qui est "protégée". Essayez de le rendre 'private' –