Исключение нулевого указателя в startActivityForResult - PullRequest
1 голос
/ 16 ноября 2011

Я пытаюсь вызвать камеру из HTML5 и JavaScript.Мой код, как показано ниже.Но я получаю исключение нулевого указателя.

Основная активность:

 public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
            WebView webview=(WebView)findViewById(R.id.webkitWebView1); 
            WebSettings settings = webview.getSettings();  
            settings.setJavaScriptEnabled(true);   
            //load html5 page  
            webview.loadUrl("file:///android_asset/www/html/opencamera.html");  

            openCamera=new OpenCamera();  
            webview.addJavascriptInterface(openCamera,"camera");  

        }  

        @Override   
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
            if (requestCode== 0 && resultCode == Activity.RESULT_OK){   
                System.out.println("Done");  
            }  
        }  

Вызов камеры:

public class OpenCamera extends Activity {  

    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
    }  

    public void startCameraActivity(){  
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );  
        startActivityForResult(intent,0);  
    }  

}  

HTML-страница:

 <!DOCTYPE HTML>  
    <html>  
    <head>  
    <script type="text/javascript">  
    function openCamera(){  
        //alert("cameras");  
        camera.startCameraActivity();  
    }  
    </script>  


    <title>Welcome</title>  
    </head>  
    <body>  
    Hello World!!!  
    <br/>  
    <button type="button" onclick="openCamera()">Capture Image</button>  
    </body>  
    </html>  

Разрешения в манифесте:

<uses-feature android:name="android.hardware.camera" />  
    <uses-permission android:name="android.permission.CAMERA" />  
    <uses-feature android:name="android.hardware.camera.autofocus" />  
    <uses-permission android:name="android.permission.INTERNET" />

Logcat:

11-16 08:56:07.133: ERROR/AndroidRuntime(539): java.lang.NullPointerException  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.app.Activity.startActivityForResult(Activity.java:2817)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at com.test.camera.OpenCamera.startCameraActivity(OpenCamera.java:17)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.webkit.WebViewCore.nativeTouchUp(Native Method)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.webkit.WebViewCore.nativeTouchUp(Native Method)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.webkit.WebViewCore.access$3300(WebViewCore.java:52)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1150)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.os.Handler.dispatchMessage(Handler.java:99)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.os.Looper.loop(Looper.java:123)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:621)  
11-16 08:56:07.133: ERROR/AndroidRuntime(539):     at java.lang.Thread.run(Thread.java:1096)  

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

Вы начинаете Camera Activity с OpenCamera Активность, которая еще не запущена (в соответствии с способом запуска Android Activity), поэтому контекст OpenCamera Активность нулевой, поэтому ваш Context null в то время и вызывает NullPointerException.

Обход:

Передать контекст в функцию startCameraActivity() как

public void startCameraActivity(Context con){  
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );  
        con.startActivityForResult(intent,0);  
}

передать контекст WebView

webview.addJavascriptInterface(this,"context");

и в вашем скрипте

<script type="text/javascript">  
    function openCamera(){   
        camera.startCameraActivity(context);  
    }  
</script>

OpenCamera не обязательно должен быть Activity

0 голосов
/ 16 ноября 2011

попробуйте при запуске камеры

 Intent intent = new Intent("com.your.package.TAKE_PICTURE");  
 startActivityForResult(intent,0); 

 <activity android:name="OpenCamera" android:label="@string/app_name"> 
      <intent-filter>    
            <action android:name="com.your.package.TAKE_PICTURE" /> 
            <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
 </activity> 
0 голосов
/ 16 ноября 2011

У вас должен быть правильный фильтр намерений в файле манифеста. По этой причине вы получаете исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...