ユーザーが無効なデータを検索フィールドに入力したときに、ダイアログ ボックスを表示しようとしています。入力検証を含む検索アクションはすべて で実行さAsyncTask
れMain Activity
ます。ダイアログの作成者は、メイン アクティビティの外側の外部クラスにあります。
を取得してJSON Array
、結果がないかどうかを確認します。結果がない場合は、ダイアログを介してユーザーに知らせたいと思います。これは拡張する私のメインにありますActivity
。
try{
results = jSon.getJSONArray(TAG_RESULTS);
Log.d("results as string", results.toString());
String strResults = results.toString();
if(!strResults.equals("[]")){
for(int i = 0; i < results.length(); i++){
JSONObject r = results.getJSONObject(i);
firstID = r.getString(TAG_ID);
}
}
else{
DialogFragment newFragment = new NoResult();
newFragment.show(getFragmentManager(), "noresult");
}
}
catch(JSONException e){
Log.e("Error", e.toString());
}
これが私のDialog
創造者です
public class NoResult extends DialogFragment {
public void customCreate(final Context context){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(R.string.no_result)
.setPositiveButton(R.string.back_to_one, DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int d){
//Try Again
Intent intent = new Intent(context, Main.class);
context.startActivity(intent);
}
});
};
}
結果が [] と等しい場合でも、アプリは残りのコードを実行し、無効な API クエリ URL を組み立てます。logcat
APIクエリのエラーが原因で、最後のステップである結果アクティビティを表示すると、アプリがクラッシュすることがわかります。
これは、無効な入力を見つけてダイアログが表示されなかった後に照会されるリンクです: http://api.themoviedb.org/3/person/null/credits?api_key=apikey
nullはID 番号である必要がありますが、それをキャッチするはずの if else の後に検索がまだ無効なデータで実行されているため、そうではありません。
ログキャット:
06-20 02:49:29.091: E/AndroidRuntime(5599): FATAL EXCEPTION: main
06-20 02:49:29.091: E/AndroidRuntime(5599): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tot.tipofthetongue/com.tot.tipofthetongue.DisplayResultsActivity}: java.lang.NullPointerException
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.os.Looper.loop(Looper.java:137)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-20 02:49:29.091: E/AndroidRuntime(5599): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 02:49:29.091: E/AndroidRuntime(5599): at java.lang.reflect.Method.invoke(Method.java:511)
06-20 02:49:29.091: E/AndroidRuntime(5599): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-20 02:49:29.091: E/AndroidRuntime(5599): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-20 02:49:29.091: E/AndroidRuntime(5599): at dalvik.system.NativeStart.main(Native Method)
06-20 02:49:29.091: E/AndroidRuntime(5599): Caused by: java.lang.NullPointerException
06-20 02:49:29.091: E/AndroidRuntime(5599): at com.tot.tipofthetongue.DisplayResultsActivity.onCreate(DisplayResultsActivity.java:28)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.Activity.performCreate(Activity.java:5104)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-20 02:49:29.091: E/AndroidRuntime(5599): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-20 02:49:29.091: E/AndroidRuntime(5599): ... 11 more