Android AlertDialog崩溃的应用程序

时间:2013-06-20 10:27:09

标签: android android-intent android-asynctask android-alertdialog

当用户将无效数据输入搜索字段时,我试图显示一个对话框。包含输入验证的搜索操作都在AsyncTask的{​​{1}}中进行。 Dialog创建者位于Main活动之外的外部类中。

我得到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

即使结果等于[],app也会运行剩下的代码并组装一个无效的api查询URL。 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查询中的错误导致的最后一步。

这是在找到无效输入后对话框无法显示后查询的链接:http://api.themoviedb.org/3/person/null/credits?api_key=apikey

null 应该是 ID号,但这不是因为搜索仍在使用无效数据运行if else应该捕获它。

logcat的:

logcat

2 个答案:

答案 0 :(得分:0)

这是

 private void showDialog() {

    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(
            YourActivity.this);

    SpannableStringBuilder title = new SpannableStringBuilder(
            getString(R.string.log_in));
    title.setSpan(Constants.SPAN, 0, title.length(),
            Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

    SpannableStringBuilder spanMsg = new SpannableStringBuilder(
            getString(R.string.config_manual_sync_msg));
    spanMsg.setSpan(Constants.SPAN, 0, spanMsg.length(),
            Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

    alertBuilder.setTitle(title);
    alertBuilder.setIcon(R.drawable.launcher_icon);
    alertBuilder.setMessage(spanMsg);
    alertBuilder.setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.i(TAG, "Yes clicked");
                    dialog.cancel();
                    Perform action
                }

            });

    alertBuilder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    Log.i(TAG, "canceled");
                }
            });

    AlertDialog alertDialog = alertBuilder.create();
    alertDialog.show();

}

答案 1 :(得分:0)

如果您想使用DialogFragment,则需要覆盖onCreateViewonCreateDialog

这是文档说的

  

实现应覆盖此类并实现 onCreateView(LayoutInflater,ViewGroup,Bundle)以提供对话框的内容。或者,他们可以覆盖 onCreateDialog(Bundle)来创建一个完全自定义的对话框,例如AlertDialog,它有自己的内容。

请参阅文档here