片段和应用程序中的单击按钮上的NPE之后崩溃

时间:2013-07-11 06:31:26

标签: android android-fragments android-button

我正从我的一个活动中调用片段,并在片段本身中有登录按钮。它给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)

3 个答案:

答案 0 :(得分:0)

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

EditText userName = (EditText)rootView.findViewById(R.id.userName);

答案 1 :(得分:0)

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

EditText userName = (EditText)findViewById(R.id.userName);
String user_Name = userName.getText().toString();
EditText password = (EditText)findViewById(R.id.password);

答案 2 :(得分: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);

此外,每次按钮点击都无需初始化视图。

移动外部按钮点击按钮。