2017-05-01 67 views
-1

我遇到了显示警告框的代码部分,要求用户输入数据集的名称。内部存储器中将创建一个具有相同名称的文件。警报对话框工作正常,但在SD卡中创建的文件始终为“null.txt”。经过几个小时的搜索之后,我尝试了所有的解决方案,例如为警告框创建自定义布局,向edittext等添加TextWatcher,但没有任何帮助。当我手动将数据集名称分配给变量'Set'时,该文件被成功创建。因此,alertdialog存在问题。我正在使用android studio 2.3.1。请帮助。Android警报对话框Edittext值不显示

我也在发布代码。

else if (map2.contains("1") || map2.contains("4")) { 
    final EditText edittext = new EditText(Scan.this); 
    AlertDialog.Builder alert1 = new AlertDialog.Builder(Scan.this); 
    alert1.setMessage("Name of the dataset"); 
    alert1.setTitle("Enter Your Title"); 
    alert1.setView(edittext); 
    alert1.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      String set = edittext.getText().toString(); 
      Set = set; 
     } 
    }); 
    alert1.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface dialog, int whichButton) { 
     } 
    }); 
    alert1.show(); 
} 
myFile = new File(Environment.getExternalStorageDirectory(),Set+".txt"); 
if (!myFile.exists()) { 
    try { 
     myFile.createNewFile(); 
     FileOutputStream fOut = new FileOutputStream(myFile); 
     OutputStreamWriter osw = new OutputStreamWriter(fOut); 
     osw.write(message1); 
     osw.flush(); 
     osw.close(); 
     fOut.close(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
    } 
} 

回答

0

试试这个代码:

膨胀含Edittext您的自定义布局,并使用它像:

LayoutInflater inflater = LayoutInflater.from(Scan.this);    
final View view = inflater.inflate(R.layout.custom_layout, null); 
AlertDialog.Builder alert = new AlertDialog.Builder(Scan.this); 

alert.setTitle("Tilte"); 
alert.setMessage("Name of the dataset"); 
alert.setView(view); 

final EditText et1 = (EditText) view.findViewById(R.id.editText1); 

alert.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      String s1=et1.getText().toString(); 
      //do operations using s1... 
      myFile = new File(Environment.getExternalStorageDirectory(),s1+".txt"); 
      if (!myFile.exists()) { 
       try { 
        myFile.createNewFile(); 
        FileOutputStream fOut = new FileOutputStream(myFile); 
        OutputStreamWriter osw = new OutputStreamWriter(fOut); 
        osw.write(message1); 
        osw.flush(); 
        osw.close(); 
        fOut.close(); 
       } 
       catch (Exception e) { 
        e.printStackTrace(); 
       } 
       finally { 
       } 
     } 
}); 

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
      dialog.cancel(); 
    } 
}); 

alert.show(); 

从@Deepti Maduskar

最后我能解决这个问题。问题在于全球可变集合的定义。我只需要声明它,而不是将其定义为final

+0

试过,但没有工作。 –

+0

在你的'onClick'里面打印一个日志,看看你是否得到这个值... – rafsanahmad007

+0

是的值被分配,但是在警报对话框可以传递值之前创建文件。 –

1

您在对话框中设置标题之前创建文件。 试试这个:

else if (map2.contains("1") || map2.contains("4")) { 
    final EditText edittext = new EditText(Scan.this); 
    AlertDialog.Builder alert1 = new AlertDialog.Builder(Scan.this); 
    alert1.setMessage("Name of the dataset"); 
    alert1.setTitle("Enter Your Title"); 
    alert1.setView(edittext); 
    alert1.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      String set = edittext.getText().toString(); 
      createFile(set); 
     } 
    }); 
    alert1.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
     public void onClick(DialogInterface dialog, int whichButton) { 
     } 
    }); 
    alert1.show(); 
} 
} 
private void createFile(String set){ 
    myFile = new 
File(Environment.getExternalStorageDirectory(),set+".txt"); 
    if (!myFile.exists()) { 
     try { 
      myFile.createNewFile(); 
      FileOutputStream fOut = new FileOutputStream(myFile); 
      OutputStreamWriter osw = new OutputStreamWriter(fOut); 
      osw.write(message1); 
      osw.flush(); 
      osw.close(); 
      fOut.close(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     finally { 
     } 
    } 

}

0

你给的权限清单:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

请检查此创建.txt文件。

String editString = mEditText.getText().toString(); 
    filename = fileName_mEditText.getText().toString(); 

    if (filename.trim().equalsIgnoreCase("")) { 
     fileName_mEditText.setError("Enter File Name!"); 
    }else if (editString.trim().equalsIgnoreCase("")) { 
     mEditText.setError("Enter Text!"); 
    } else { 
     try { 
      FileOperations fop = new FileOperations(); 
      fop.write(filename, editString); 
      if (fop.write(filename, editString)) { 
       Toast.makeText(getApplicationContext(), filename + ".txt created", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(getApplicationContext(), "I/O error", Toast.LENGTH_SHORT).show(); 
      } 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
     } 
    } 
+0

当我分配相同的“设置”变量一些其他它的价值工作正常。该文件正在创建。 –