FileProvider.GetUriForFileでNullPointerExceptionが発生する
デバック時にNullPointerExceptionが発生しマニフェストファイルでミスがあったので覚え書きです。
private void CameraIntent() { Log.Info(TAG, "CameraIntent::start"); File cameraFolder = new File(Android.OS.Environment.GetExternalStoragePublicDirectory( Android.OS.Environment.DirectoryDcim), "Camera"); // file name string filename = new SimpleDateFormat("ssHHmmss", Locale.Us) .Format(new Date()); m_filePath = String.Format("{0}{1}.jpg", cameraFolder.Path, filename); Log.Debug(TAG, "filename:: {0}", m_filePath); Log.Debug(TAG, this.PackageName); try { m_uri = FileProvider.GetUriForFile(this, this.PackageName + ".provider", new File(m_filePath)); } catch(Exception e) { Log.Error(TAG, e.ToString()); } Intent intent = new Intent(MediaStore.ActionImageCapture); intent.PutExtra(MediaStore.ExtraOutput, m_uri); StartActivityForResult(intent, RESULT_CAMERA); Log.Debug(TAG, "CameraIntent::end"); }
- AndroidManifest
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider>
- log
07-30 00:00:58.011 D/Phptp2Text::MainActivity(23022): filename:: /storage/emulated/0/DCIM/Camera58000058.jpg 07-30 00:00:58.012 D/Phptp2Text::MainActivity(23022): Photo2Text.Photo2Text 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): Java.Lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <09bf3e262b934ffab2ba01f9fc7fd54d>:0 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at Java.Interop.JniPeerMembers+JniStaticMethods.InvokeObjectMethod (System.String encodedMember, Java.Interop.JniArgumentValue* parameters) [0x00018] in <09bf3e262b934ffab2ba01f9fc7fd54d>:0 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at Android.Support.V4.Content.FileProvider.GetUriForFile (Android.Content.Context context, System.String authority, Java.IO.File file) [0x00070] in <fb0c55a748614587b658fc2ca38fdfc2>:0 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at Photo2Text.MainActivity.CameraIntent () [0x00088] in G:\repo\photo2text\Photo2Text\MainActivity.cs:73 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): --- End of managed Java.Lang.NullPointerException stack trace --- 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:591) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:565) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:403) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:30) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.view.View.performClick(View.java:5204) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.view.View$PerformClick.run(View.java:21153) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.os.Handler.handleCallback(Handler.java:739) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.os.Handler.dispatchMessage(Handler.java:95) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.os.Looper.loop(Looper.java:148) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at android.app.ActivityThread.main(ActivityThread.java:5417) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at java.lang.reflect.Method.invoke(Native Method) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 07-30 00:00:58.077 E/Phptp2Text::MainActivity(23022): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
原因
AndroidManifestに原因があった
providerがapplicationタグのそとに書かれていたので参照できずヌルぽが発生していたようだ。
書き直したAndroidManifestはこちらです。
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> </application>
単純なミスほど原因が分からず困りますね
nodejs を最新版をインストールする
nodejs を最新版をインストールする
npm からinstallしたnodejsが古い場合が多い
- npm をアップデートとする
npm install npm
- nをインストールする
npm install n
- stable版nodejsをインストール
n stable
axmlでintellisenseが有効にならない
axmlでintellisenseが有効にならなかったので有効になるようにする方法
基本的にこちら
Android .axml ファイルでは、Intellisense を有効にする方法は? - Xamarin | Microsoft Docs
ただ
android-layout-xml.xsd
schemas.android.com.apk.res.android.xsd
が見つからなかったのでGithubから
android-layout-xml.xsd、schemas.android.com.apk.res.android.xsdを以下のフォルダに保存
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Xml\Schemas
xml -> shcemaから先ほど追加したファイルを有効にする
そうするとintellisenseが有効になります
CS1056 Unexpected character '[]' を回避する
ASP.NET core でプロジェクトを作成し、Buildした際CS1056 が発生した
C:\Users\ユーザー名\AppData\Local\Tempのフォルダーに.NETCoreApp,Version=v2.0.AssemblyAttributes.csが 作成されているのでこれを削除し、ReBuildを行うとエラーができなくなった
IntelliJでjarを作成
Intellijでjarを作る方法がわからなかったので調べました
今回ビルドしたのはこれです!
contrib-drivers/bmx280 at master · androidthings/contrib-drivers · GitHub
File -> Project Structure
Artifacts -> Add -> JAR -> From modules with dependencies
Build -> Build Artifacts
これでビルドができます
Ubuntu環境構築
Ubuntu16.04でangularの環境構築をしました
基本的には
npm install -g @angular/cli
のみでOKです。
ただし、nodejsのバージョンが古い場合はインスールでこけてしまうようです。
nodejsのアップデートを行えば正常にインスールが完了します。
nodejsのアップデート方法は
npm install -g n n stable
で最新のnodejsがインスールできます。