Java 循环列表视图会使应用程序在迭代时崩溃>;6.

Java 循环列表视图会使应用程序在迭代时崩溃>;6.,java,android,Java,Android,我有一个列表视图。我循环浏览这个listview并将textview中的文本附加到sdcard中的文件中。问题是此TextView分配 tv = (TextView) row.findViewById(R.id.codigo); public void alertDialogGuardar() {             AlertDialog.Builder dialog=new AlertDialog.Builder(this);             LayoutInflater i

我有一个列表视图。我循环浏览这个listview并将textview中的文本附加到sdcard中的文件中。问题是此TextView分配

tv = (TextView) row.findViewById(R.id.codigo);
public void alertDialogGuardar() {
            AlertDialog.Builder dialog=new AlertDialog.Builder(this);
            LayoutInflater inflater = this.getLayoutInflater();
            View dialogView = inflater.inflate(R.layout.dialogo_guardar, null);
            final EditText editText = (EditText) dialogView.findViewById(R.id.nombrefichero);
   
            dialog.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                            int which) {
                            file = Environment.getExternalStoragePublicDirectory("/invgreen/"+editText.getText()+".txt");
                            System.out.println("Se elige el nombre de fichero "+editText.getText());
   
                            if (file.exists()){
                                file.delete();
                                System.out.println("Se borra el fichero "+editText.getText());
   
                            }else {
                                try {
                                    file.createNewFile();
                                    System.out.println(file.toString());
                                    System.out.println("Se crea el fichero " + editText.getText());
   
                                } catch (IOException e) {
                                    Log.e("Exception", "Error al CREAR en el fichero: " + e.toString());
                                }
                            }
   
   
                            View v;
                            System.out.println("Se declara vista");
                            TextView tv;
                            System.out.println("Se declara textview");
                            int count = lv.getAdapter().getCount();
                            for (int i = 0; i < count; i++) {
   
   
   
                                ViewGroup row = (ViewGroup) lv.getChildAt(i);
                                    //System.out.println("Dentro bucle antes de escribir en posicion "+i);
                                    //v = lv.getChildAt(i);
                                    tv = (TextView) row.findViewById(R.id.codigo);
                                    //Toast.makeText(getApplicationContext(),tv.getText().toString(),Toast.LENGTH_LONG).show();
                                    EscribeaFichero(tv.getText().toString() + System.getProperty("line.separator"));
                                    //System.out.println("Dentro bucle despues de escribir en posicion "+i);
                                //}
                                /*else{
                                    System.out.println("Dentro bucle en ultima posicion ");
                                    v = lv.getChildAt(i);
                                    tv = (TextView) v.findViewById(R.id.codigo);
                                    //Toast.makeText(getApplicationContext(),tv.getText().toString(),Toast.LENGTH_LONG).show();
                                    EscribeaFichero(tv.getText().toString());
                                }*/
                            }
   
                            finish();
                            startActivity(getIntent());
                        }
                    });
            dialog.setNegativeButton("CANCELAR",new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //Toast.makeText(getApplicationContext(),"cancel is clicked",Toast.LENGTH_LONG).show();
                }
            });
            AlertDialog alertDialog=dialog.create();
            dialog.setView(dialogView);
            dialog.show();
            //alertDialog.show();
        }
i=5后的崩溃:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
只有4次、3次、2次或一次迭代没有问题

这是我的密码

tv = (TextView) row.findViewById(R.id.codigo);
public void alertDialogGuardar() {
            AlertDialog.Builder dialog=new AlertDialog.Builder(this);
            LayoutInflater inflater = this.getLayoutInflater();
            View dialogView = inflater.inflate(R.layout.dialogo_guardar, null);
            final EditText editText = (EditText) dialogView.findViewById(R.id.nombrefichero);
   
            dialog.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                            int which) {
                            file = Environment.getExternalStoragePublicDirectory("/invgreen/"+editText.getText()+".txt");
                            System.out.println("Se elige el nombre de fichero "+editText.getText());
   
                            if (file.exists()){
                                file.delete();
                                System.out.println("Se borra el fichero "+editText.getText());
   
                            }else {
                                try {
                                    file.createNewFile();
                                    System.out.println(file.toString());
                                    System.out.println("Se crea el fichero " + editText.getText());
   
                                } catch (IOException e) {
                                    Log.e("Exception", "Error al CREAR en el fichero: " + e.toString());
                                }
                            }
   
   
                            View v;
                            System.out.println("Se declara vista");
                            TextView tv;
                            System.out.println("Se declara textview");
                            int count = lv.getAdapter().getCount();
                            for (int i = 0; i < count; i++) {
   
   
   
                                ViewGroup row = (ViewGroup) lv.getChildAt(i);
                                    //System.out.println("Dentro bucle antes de escribir en posicion "+i);
                                    //v = lv.getChildAt(i);
                                    tv = (TextView) row.findViewById(R.id.codigo);
                                    //Toast.makeText(getApplicationContext(),tv.getText().toString(),Toast.LENGTH_LONG).show();
                                    EscribeaFichero(tv.getText().toString() + System.getProperty("line.separator"));
                                    //System.out.println("Dentro bucle despues de escribir en posicion "+i);
                                //}
                                /*else{
                                    System.out.println("Dentro bucle en ultima posicion ");
                                    v = lv.getChildAt(i);
                                    tv = (TextView) v.findViewById(R.id.codigo);
                                    //Toast.makeText(getApplicationContext(),tv.getText().toString(),Toast.LENGTH_LONG).show();
                                    EscribeaFichero(tv.getText().toString());
                                }*/
                            }
   
                            finish();
                            startActivity(getIntent());
                        }
                    });
            dialog.setNegativeButton("CANCELAR",new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //Toast.makeText(getApplicationContext(),"cancel is clicked",Toast.LENGTH_LONG).show();
                }
            });
            AlertDialog alertDialog=dialog.create();
            dialog.setView(dialogView);
            dialog.show();
            //alertDialog.show();
        }
public void alertDialogGuardar(){
AlertDialog.Builder dialog=新建AlertDialog.Builder(此);
LayoutInflater充气机=this.getLayoutInflater();
视图对话框视图=充气机。充气(R.layout.dialogo_guardar,null);
final EditText EditText=(EditText)dialogView.findViewById(R.id.nombreficho);
   
对话框.setPositiveButton(“确定”,
新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,
int(其中){
file=Environment.getExternalStoragePublicDirectory(“/invgreen/”+editText.getText()+”.txt”);
System.out.println(“Se elige el nombre de fichero”+editText.getText());
   
if(file.exists()){
delete();
System.out.println(“Se borra el fichero”+editText.getText());
   
}其他{
试一试{
createNewFile();
System.out.println(file.toString());
System.out.println(“Se crea el fichero”+editText.getText());
   
}捕获(IOE异常){
Log.e(“异常”,“错误al-CREAR en el-fichero:+e.toString());
                                }
                            }
   
   
观点五;
System.out.println(“Se declara vista”);
文本视图电视;
System.out.println(“Se declara textview”);
int count=lv.getAdapter().getCount();
for(int i=0;i

有人能帮我吗?

你的计数器值多少?在使用for循环之前打印它。您应该直接从适配器(
getItem()
)获取此信息<代码>列表视图
不要立即为每一行创建子视图;它会延迟一些时间,直到滚动位置接近它们(因为它们可能在屏幕外,并且不需要查看
)。