0

我正在从我的一项活动中调用片段,并且片段本身中有登录按钮。在我单击按钮的那一刻,它给了 NPE。我已经尝试了所有的排列和组合以使其工作。这是我的代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setUserVisibleHint(true);
    View rootView = inflater.inflate(R.layout.fragment1, container, false);
    Button button = (Button) rootView.findViewById(R.id.bt_login);
        button.setOnClickListener(new View.OnClickListener(){ 
         public void onClick(View v) {
             // Perform action on click
             EditText userName = (EditText)v.findViewById(R.id.userName);
                String user_Name = userName.getText().toString();
                EditText password = (EditText)v.findViewById(R.id.password);
                String user_Password = password.getText().toString();


                if(user_Name.length()== 0 || user_Password.length()== 0)
                {
                    Toast.makeText(getActivity(), "Please enter correct information", Toast.LENGTH_LONG).show();
                    //Toast.makeText(this,"Please enter correct information",Toast.LENGTH_LONG).show();
                    return;
                }   
            loginAction(user_Name,user_Password);   

         }
     });
     return rootView;
    }

堆栈跟踪

07-11 11:50:02.536: E/AndroidRuntime(429): FATAL EXCEPTION: main
07-11 11:50:02.536: E/AndroidRuntime(429): java.lang.NullPointerException
07-11 11:50:02.536: E/AndroidRuntime(429):  at com.androidbegin.sidemenututorial.Fragment1$1.onClick(Fragment1.java:46)
07-11 11:50:02.536: E/AndroidRuntime(429):  at android.view.View.performClick(View.java:2408)
07-11 11:50:02.536: E/AndroidRuntime(429):  at android.view.View$PerformClick.run(View.java:8816)
07-11 11:50:02.536: E/AndroidRuntime(429):  at android.os.Handler.handleCallback(Handler.java:587)
07-11 11:50:02.536: E/AndroidRuntime(429):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-11 11:50:02.536: E/AndroidRuntime(429):  at android.os.Looper.loop(Looper.java:123)
07-11 11:50:02.536: E/AndroidRuntime(429):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-11 11:50:02.536: E/AndroidRuntime(429):  at java.lang.reflect.Method.invokeNative(Native Method)
07-11 11:50:02.536: E/AndroidRuntime(429):  at java.lang.reflect.Method.invoke(Method.java:521)
07-11 11:50:02.536: E/AndroidRuntime(429):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-11 11:50:02.536: E/AndroidRuntime(429):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-11 11:50:02.536: E/AndroidRuntime(429):  at dalvik.system.NativeStart.main(Native Method)
4

3 回答 3

0

您应该使用 rootView 来扩充您的视图。

EditText userName = (EditText)rootView.findViewById(R.id.userName);
于 2013-07-11T06:34:08.043 回答
0

Viewv是您单击的单个视图,而不是布局,因此您不应调用v.findViewById(...). 尝试

EditText userName = (EditText)findViewById(R.id.userName);
String user_Name = userName.getText().toString();
EditText password = (EditText)findViewById(R.id.password);
于 2013-07-11T06:34:10.240 回答
0

您应该使用视图对象(rootview)来初始化视图

EditText userName,password; // delcare variables as class member.
View rootView = inflater.inflate(R.layout.fragment1, container, false);
userName = (EditText)rootview.findViewById(R.id.userName);
password = (EditText)rootview.findViewById(R.id.password);

也不需要每次都在按钮单击时初始化视图。

将初始化移到按钮单击之外。

于 2013-07-11T06:34:57.840 回答