确定。我使用导航抽屉完成了一个应用程序,列表上的每个项目都会打开一个新活动。 我总是讨厌片段,但现在我认为片段是我需要的。我想使用Fragments而不是制作新的Activity。但是出现了问题。
我无法将数据保存在碎片的内部存储中。在活动中,这不是问题。我不知道为什么?即使吐司也不行。有什么想法吗?
public class PagesFragment extends Fragment implements OnClickListener{
public PagesFragment(){}
Button save;
EditText filename, entry, pass;
String FILENAME, JOUR, PASSWORD;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_pages, container, false);
save = (Button) getActivity().findViewById(R.id.b5);
filename = (EditText) getActivity().findViewById(R.id.editText3);
entry = (EditText) getActivity().findViewById(R.id.editText1);
pass = (EditText) getActivity().findViewById(R.id.editText2);
return rootView;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
FILENAME = filename.getText().toString();
JOUR = entry.getText().toString();
PASSWORD = pass.getText().toString();
if (PASSWORD.contentEquals("") || JOUR.contentEquals("")
|| FILENAME.contentEquals("")) {
Toast.makeText(getApplicationContext(), "All field required.",
Toast.LENGTH_SHORT).show();
} else {
String usernametext = "Username:\n";
String passwordtext = "Password:\n";
String space = "\n";
try {
FileOutputStream fos = openFileOutput(FILENAME,
Context.MODE_PRIVATE);
fos.write(usernametext.getBytes());
fos.write(JOUR.getBytes());
fos.write(space.getBytes());
fos.write(passwordtext.getBytes());
fos.write(PASSWORD.getBytes());
fos.close();
Toast.makeText(getApplicationContext(),
"Your Credentials are saved.", Toast.LENGTH_SHORT)
.show();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
我在吐司上遇到问题。它说方法getApplicationContext()未定义为PagesFragment类型(这是一个类),而openFileOutPut也是同样的问题。
我在这个网站上看到了解决方案,但我的问题是,如果摆脱所有错误也无法正常工作。我点击按钮,没有任何反应。没有显示toast,也没有保存数据。
我只是想看看点击按钮是否会显示吐司,所以我评论了所有内容,然后就在那里留下了吐司。但是,当我点击按钮时,它甚至没有显示吐司。我的意思是onClick
甚至没有工作。
PS。如果有人知道有关保存和从不同片段检索数据的任何教程,请将链接放在下面。那会非常有帮助。感谢。
logcat的:
02-28 12:46:43.957: E/AndroidRuntime(9022): FATAL EXCEPTION: main
02-28 12:46:43.957: E/AndroidRuntime(9022): java.lang.NullPointerException
02-28 12:46:43.957: E/AndroidRuntime(9022): at info.androidhive.slidingmenu.PagesFragment.onCreateView(PagesFragment.java:32)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.app.Fragment.performCreateView(Fragment.java:1695)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.app.BackStackRecord.run(BackStackRecord.java:682)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.os.Handler.handleCallback(Handler.java:730)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.os.Handler.dispatchMessage(Handler.java:92)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.os.Looper.loop(Looper.java:137)
02-28 12:46:43.957: E/AndroidRuntime(9022): at android.app.ActivityThread.main(ActivityThread.java:5290)
02-28 12:46:43.957: E/AndroidRuntime(9022): at java.lang.reflect.Method.invokeNative(Native Method)
02-28 12:46:43.957: E/AndroidRuntime(9022): at java.lang.reflect.Method.invoke(Method.java:525)
02-28 12:46:43.957: E/AndroidRuntime(9022): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
02-28 12:46:43.957: E/AndroidRuntime(9022): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
02-28 12:46:43.957: E/AndroidRuntime(9022): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
Finnaly解决了这个问题。
save = (Button) getActivity().findViewById(R.id.b5);
filename = (EditText) getActivity().findViewById(R.id.editText3);
entry = (EditText) getActivity().findViewById(R.id.editText1);
pass = (EditText) getActivity().findViewById(R.id.editText2);
在这一行中,由于函数返回getActivity()
,我将rootView
替换为rootView
。
我还添加了
save.setOnClickListener(this);
在这一行
FileOutputStream fos = openFileOutput(FILENAME,
Context.MODE_PRIVATE);
我添加了getActivity()
,所以它变成了,
FileOutputStream fos = getActivity().openFileOutput(FILENAME,
Context.MODE_PRIVATE);
现在有效。感谢@Shrikant的回答。
答案 1 :(得分:0)
尝试使用getActivity()片段来显示toast,而不是getApplicationContext。 对于按钮单击,请使用btn.setOnClickListener(this)。