質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

3738閲覧

Android開発 Attempt to invoke virtual methodのエラーの解消法

sumizome

総合スコア7

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/09/15 08:50

###前提・実現したいこと
"Android-DirectoryChooser(https://github.com/passy/Android-DirectoryChooser)"を使って、フォルダ指定を作っています。
PreferenceFragmentの中に書いているのですが、キャンセルを押した時に以下のエラーがでて困っております。
また、OKを押した時も何も起きません。(エラーは出ないが)
どのように対処すればよろしいのでしょうか。
###キャンセルを押した時のエラー

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.gu.option.Option.foreach(com.gu.option.UnitFunction)' on a null object reference at net.rdrei.android.dirchooser.DirectoryChooserFragment.returnSelectedFolder(DirectoryChooserFragment.java:481) at net.rdrei.android.dirchooser.DirectoryChooserFragment.access$200(DirectoryChooserFragment.java:54) at net.rdrei.android.dirchooser.DirectoryChooserFragment$1.onClick(DirectoryChooserFragment.java:160) at android.view.View.performClick(View.java:4756) at android.view.View$PerformClick.run(View.java:19761) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5264) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695)

###PreferenceFragment.java

import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; import android.support.annotation.NonNull; import android.util.Log; import com.gu.option.UnitFunction; import net.rdrei.android.dirchooser.DirectoryChooserConfig; import net.rdrei.android.dirchooser.DirectoryChooserFragment; import java.util.Objects; public class PreferenceFragment extends android.preference.PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener, DirectoryChooserFragment.OnFragmentInteractionListener { Context context; private DirectoryChooserFragment mDialog; //getSystemServiceを使うため @SuppressLint("ValidFragment") public PreferenceFragment(Context context){ this.context = context; } //default constructor を提供しなければならないため public PreferenceFragment(){} //path名 String path = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 設定画面の作成 addPreferencesFromResource(R.xml.preference); portget(); // IP取得 WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String strIPAddress = ((ipAddress >> 0) & 0xFF) + "." + ((ipAddress >> 8) & 0xFF) + "." + ((ipAddress >> 16) & 0xFF) + "." + ((ipAddress >> 24) & 0xFF); // SummaryにIP表示 Preference ip = (findPreference("IPAddress")); ip.setSummary(strIPAddress); //pathに代入 getDirectory(); //summaryにpathを表示 showDirectory(); //DirectorySelect final DirectoryChooserConfig config = DirectoryChooserConfig.builder() .newDirectoryName("DialogSample") .initialDirectory(path) .build(); mDialog = DirectoryChooserFragment.newInstance(config); Preference directory = (findPreference("Directory")); directory.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { //open browser or intent here mDialog.show(getFragmentManager(), null); return true; } }); } //Summaryを更新するメソッド public void portget() { EditTextPreference port = (EditTextPreference)getPreferenceScreen().findPreference("Port"); port.setSummary(port.getText()); } //pathの更新 public String getDirectory() { SharedPreferences pathPref = context.getSharedPreferences("pathPref", Context.MODE_PRIVATE); //Summaryをpathに try { path = pathPref.getString("path",""); }catch (RuntimeException e) { Log.d("Directory", "getDirectory: error"); } //""の時の処理 path =""; if(Objects.equals(path, "")) path = "/sdcard/VRPlayer"; //pathPrefのpathに値を保存 SharedPreferences.Editor editor = pathPref.edit(); editor.putString("path",path); editor.commit(); return path; } //summaryへのpathの表示 public void showDirectory() { Preference directory = (findPreference("Directory")); directory.setSummary(path); } //設定値を変えた時に実行される @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { portget(); } @Override public void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } //OKを押した時の処理 @Override public void onSelectDirectory(@NonNull final String newpath) { Log.d("Directory", "select"); //変数pathを更新 path = newpath; //pathに代入 getDirectory(); //summaryにpathを表示 showDirectory(); mDialog.dismiss(); } //Cancelを押した時の処理 @Override public void onCancelChooser() { Log.d("Directory", "cancel"); mDialog.dismiss(); } }

###build.gradle

android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.nittcprocon.cardboardplayer" minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } } } repositories { maven { url 'http://guardian.github.com/maven/repo-releases' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile project(':audio') compile project(':base') compile project(':common') compile project(':commonwidget') compile project(':controller') compile project(':panowidget') compile project(':videowidget') compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.gu:option:1.3' compile 'net.rdrei.android.dirchooser:library:3.2@aar' }

###試したこと
OK、キャンセルを押した場合、それぞれ、onSelectDirectory,onCancelChooserに飛ばされるはずなのですが、飛ばされていないです。(Logで確認済み)

###補足情報
開発環境:AndroidStudio 2.1.3
実行環境:Asus Zenfone2
全ソース:https://github.com/sumizome0213/CardboardPlayer

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問