Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android应用程序中将对象添加到公共arraylist时出错_Android_Dialog - Fatal编程技术网

在android应用程序中将对象添加到公共arraylist时出错

在android应用程序中将对象添加到公共arraylist时出错,android,dialog,Android,Dialog,我已经扩展了应用程序,并在那里声明了一个公共ArrayList,我用它来保存数据(我知道它在android中不应该是单例,但这是我唯一能做的事情) 问题: 当我显示我的CreateNewObject对话框并按OK时,我得到以下错误 错误: 10-30 10:20:19.069: E/AndroidRuntime(632): java.lang.IllegalStateException: The content of the adapter has changed but ListView di

我已经扩展了
应用程序
,并在那里声明了一个
公共ArrayList
,我用它来保存数据(我知道它在android中不应该是单例,但这是我唯一能做的事情)

问题: 当我显示我的
CreateNewObject
对话框并按OK时,我得到以下错误

错误:

10-30 10:20:19.069: E/AndroidRuntime(632): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(16908298, class android.widget.ListView) with Adapter(class com.nuclear.gfr.adapter.PatientAdapter)]
我的代码:

public class NewPatientDialog extends DialogFragment {

    private static final String TAG = "NUKClear";

    OnNewPatientlistener listener;

    private NewPatientDialog() {

    }

    public interface OnNewPatientlistener {
        public void OnNewPatient(Patient newPatient);
    }

    public void addPatientAction(Patient patient) {
        OnNewPatientlistener activity = (OnNewPatientlistener) getActivity();
        activity.OnNewPatient(patient);
    }

    public static NewPatientDialog newInstance(String title) {
        NewPatientDialog frag = new NewPatientDialog();
        Bundle args = new Bundle();
        args.putString("title", title);
        frag.setArguments(args);
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String title = getArguments().getString("title");

        LayoutInflater inflater = (LayoutInflater) getActivity()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        final View newPatient = inflater.inflate(R.layout.new_patient_dialog,
                null);
        Log.d(TAG, "Creating dialog for new patientinput...");
        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(title)
                .setView(newPatient)
                .setPositiveButton(R.string.alert_dialog_ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                final EditText name = (EditText) newPatient
                                        .findViewById(R.id.name_edit);
                                final EditText ssn = (EditText) newPatient
                                        .findViewById(R.id.ssn_edit);
                                final EditText accnum = (EditText) newPatient
                                        .findViewById(R.id.accnr_edit);

                                final Patient patient = new Patient(ssn.getText()
                                        .toString(), name.getText().toString(),
                                        new Study(SimpleDateFormat
                                                .getDateInstance().toString(),
                                                accnum.getText().toString()));

                                addPatientAction(patient); 

                                DatabaseHelper db = new DatabaseHelper(
                                        getActivity());
                                db.addPatientStudy(patient);

                                /*DataManager dm = new DataManager(getActivity()
                                        .getBaseContext());
                                dm.addPatient(patient);*/

                                /*
                                 * PatientManager pm = new
                                 * PatientManager(getActivity
                                 * ().getBaseContext()); pm.add(patient);
                                 */

                                // Interfacecallback
                                /*
                                 * OnNewPatientlistener activity =
                                 * (OnNewPatientlistener) getActivity();
                                 * activity.OnNewPatient(patient);
                                 */

                            }
                        })
                .setNegativeButton(R.string.alert_dialog_cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                dismiss();
                            }
                        }).create();

    }
}
有人能解释为什么会发生这种情况以及如何避免这种情况吗?

添加

runOnUiThread(new Runnable() {
              public void run() {
                  GFRApplication.dPatients.add(newPatient);
              }
            });

…成功了。

尝试使arraylist同步。我得到了错误:对现场患者的非法修改;只有公共的、受保护的、私有的、静态的、最终的、瞬态的和易失性的才允许看到这个不确定这是如何解释我的问题的,你能详细说明一下吗。找到了解决方案。必须添加:'runOnUiThread(newrunnable(){public void run(){GFRApplication.dppatients.add(newPatient);}}});'