如何在android中创建一个简单的保存文件名对话框?
我正在尝试创建一个简单的android应用程序进行练习。这个应用程序是一个简单的记事本,有一个主要的活动,写作活动和阅读活动。 主活动显示“写”和“读”两个按钮,分别变为写活动和读活动。 现在我正在努力发展写作活动。 书写活动显示一个用于注释输入的编辑文本和一个保存按钮。 单击“保存”按钮后,我希望它显示一个对话框,其中一个editText用于文件名输入,两个按钮“保存”,用于保存文件并返回主活动,“取消”用于返回写入活动。 我的代码可以转换为readingactivity和writingactivity,但writingactivity中的对话框不起作用。 你能帮助我吗? 我试过使用下面的代码 最佳管理者 写作活动课如何在android中创建一个简单的保存文件名对话框?,android,dialog,fragment,Android,Dialog,Fragment,我正在尝试创建一个简单的android应用程序进行练习。这个应用程序是一个简单的记事本,有一个主要的活动,写作活动和阅读活动。 主活动显示“写”和“读”两个按钮,分别变为写活动和读活动。 现在我正在努力发展写作活动。 书写活动显示一个用于注释输入的编辑文本和一个保存按钮。 单击“保存”按钮后,我希望它显示一个对话框,其中一个editText用于文件名输入,两个按钮“保存”,用于保存文件并返回主活动,“取消”用于返回写入活动。 我的代码可以转换为readingactivity和writingact
public class WritingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_writing);
}
//method onclick save button xml file
public void metodoSalva(View view) {
SaveDialogFragment DialogFSave = new SaveDialogFragment();
DialogFSave.show(getSupportFragmentManager(), "NoticeDialogFragment");
Context context = getApplicationContext();
EditText editText = (EditText) findViewById(R.id.filename_editText);
String filename = new String(editText.getText().toString() + ".txt");
File mydir = context.getFilesDir(); //crea una directory privata per l'app in questione nella memoria interna
File file = new File(mydir, filename); //crea il file nella cartella "mydir" di nome "filename"
editText = (EditText) findViewById(R.id.write_note);
String mia_nota = editText.getText().toString();
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(mia_nota.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
finish(); //torna nella main activity terminando l'activity corrente
}
}
对话类
public class SaveDialogFragment extends DialogFragment {
public SaveDialogFragment() {
// Required empty public constructor
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.fragment_save_dialog, null))
.setPositiveButton(R.string.button_save, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
}
fragment_save_dialog.xml文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context="com.html.utente.jammanote.SaveDialogFragment">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/menu_fragment" />
<EditText
android:id="@+id/filename_editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp"
android:hint="@string/message_insert" />
</FrameLayout>
你的应用程序崩溃了吗?如果是,请添加日志。是。我的应用程序已停止。我在哪里可以找到我的日志?我使用genymotion和我的三星galaxy s5 neo测试appHi,我用LogFile升级问题在应用程序崩溃后添加日志。它应该会显示错误发生的位置(类名和行号)。您好,我再次用日志文件升级了这个问题
03-14 15:19:23.755 15636-15636/com.html.utente.jammanote E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3591)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.view.View$1.onClick(View.java:3586)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.html.utente.jammanote.WritingActivity.metodoSalva(WritingActivity.java:29)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.view.View$1.onClick(View.java:3586)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)