Java 循环列表视图会使应用程序在迭代时崩溃>;6.
我有一个列表视图。我循环浏览这个listview并将textview中的文本附加到sdcard中的文件中。问题是此TextView分配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
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()
)获取此信息<代码>列表视图不要立即为每一行创建子视图;它会延迟一些时间,直到滚动位置接近它们(因为它们可能在屏幕外,并且不需要查看)。