我在尝试在Android应用中实现登录屏幕时遇到问题。 用户必须使用字符串“ user”填写登录名和密码字段。 每当我运行此代码时,我的android虚拟设备就会崩溃。 它甚至没有打开,并且设备屏幕上出现“不幸的是,LoginScreen已停止”错误消息。 这是我的代码:

我的主要活动

package com.example.loginscreen;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

Button ok = null;
EditText login = null;
EditText pass = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    ok = (Button) findViewById(R.id.ok);  

    login = (EditText) findViewById(R.id.login_text); 
    pass = (EditText) findViewById(R.id.pass_text); 

    ok.setOnClickListener(new View.OnClickListener() { 
            public void onClick(View view) { 
                    String loginStr = login.getText().toString(); 
                    String passStr = pass.getText().toString(); 
                    if (loginStr != null && loginStr.equals("user")) { 
                            if (passStr != null && passStr.equals("user")) {
                                Toast.makeText(getApplicationContext(), "Redirecting...", 
                                Toast.LENGTH_SHORT).show();
                            } else {
                                Toast.makeText(getApplicationContext(), "Wrong Credentials",
                                Toast.LENGTH_SHORT).show();
                            }
                    }
            } 
    }); 
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
    }
}

}

fragment_main

<EditText
    android:id="@+id/login_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="117dp"
    android:ems="10"
    android:inputType="textPersonName" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/pass_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/login_text"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="72dp"
    android:ems="10"
    android:inputType="textPassword" />

<Button
    android:id="@+id/ok"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/pass_text"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="56dp"
    android:text="@string/ok" />

我的LogCat

04-20 11:50:39.501: D/AndroidRuntime(2471): Shutting down VM
04-20 11:50:39.501: W/dalvikvm(2471): threadid=1: thread exiting with uncaught exception (group=0xb1a21ba8)
04-20 11:50:39.511: E/AndroidRuntime(2471): FATAL EXCEPTION: main
04-20 11:50:39.511: E/AndroidRuntime(2471): Process: com.example.loginscreen, PID: 2471
04-20 11:50:39.511: E/AndroidRuntime(2471): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.loginscreen/com.example.loginscreen.MainActivity}: java.lang.NullPointerException
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.os.Handler.dispatchMessage(Handler.java:102)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.os.Looper.loop(Looper.java:136)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at java.lang.reflect.Method.invokeNative(Native Method)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at java.lang.reflect.Method.invoke(Method.java:515)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at dalvik.system.NativeStart.main(Native Method)
04-20 11:50:39.511: E/AndroidRuntime(2471): Caused by: java.lang.NullPointerException
04-20 11:50:39.511: E/AndroidRuntime(2471):     at com.example.loginscreen.MainActivity.onCreate(MainActivity.java:38)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.Activity.performCreate(Activity.java:5231)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-20 11:50:39.511: E/AndroidRuntime(2471):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-20 11:50:39.511: E/AndroidRuntime(2471):     ... 11 more

我在Virtual Box上使用Eclipse + ADT 22.3版本。 该应用程序具有以下配置

Minimum Required SDK: API 18
Target SDK: API 19
Compile With: API 19

拜托,我在做什么错?

===============>>#1 票数:0

尝试这个..

因为ButtonEditText的全部都属于fragment_main.xml所以您必须在PlaceholderFragment.java做到这一点。

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }
    Button ok = null;
    EditText login = null;
    EditText pass = null;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        ok = (Button) rootView.findViewById(R.id.ok);  

login = (EditText) rootView.findViewById(R.id.login_text); 
pass = (EditText) rootView.findViewById(R.id.pass_text); 

ok.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
                String loginStr = login.getText().toString(); 
                String passStr = pass.getText().toString(); 
                if (loginStr != null && loginStr.equals("user")) { 
                        if (passStr != null && passStr.equals("user")) {
                            Toast.makeText(getActivity(), "Redirecting...", 
                            Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(getActivity(), "Wrong Credentials",
                            Toast.LENGTH_SHORT).show();
                        }
                }
        } 
}); 
        return rootView;
    }
}

===============>>#2 票数:0 已采纳

您正在初始化Activity中fragment_main.xml中的视图。 相反,您应该使用rootView.findViewById在Fragment onCreateView进行rootView.findViewById

findViewById在当前视图层次结构中查找视图。 您已将activity_main.xml设置为Activity。 因此,如果您在Activity中初始化视图失败, NUllPointerException导致NUllPointerException

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }
    Button ok = null;
    EditText login = null;
    EditText pass = null;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        ok = (Button) rootView.findViewById(R.id.ok);  

        login = (EditText) rootView.findViewById(R.id.login_text); 
        pass = (EditText) rootView.findViewById(R.id.pass_text); 

        ok.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
                String loginStr = login.getText().toString(); 
                String passStr = pass.getText().toString(); 
                if (loginStr != null && loginStr.equals("user")) { 
                        if (passStr != null && passStr.equals("user")) {
                            Toast.makeText(getActivity(), "Redirecting...", 
                            Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(getActivity(), "Wrong Credentials",
                            Toast.LENGTH_SHORT).show();
                        }
                }
        } 
     }); 
        return rootView;
    }
}

===============>>#3 票数:0

添加方法

myMethod() {

//Code hear

}

到Activity并在您的xml上添加

android:onClick="myMethod"

到你的按钮

  ask by WevertonApolinário translate from so

未解决问题?本站智能推荐:

2回复

setOnClickListener使我的应用程序崩溃[重复]

这个问题已经在这里有了答案: NullPointerException访问onCreate()中的视图 13个答案 我知道这个问题已经被问过很多次了,但是其他答案都没有帮助我。 当我注释掉setOnClickListener时,我的代码可以正常工作。 所以,
1回复

在Android和应用程序上使用setOnClickListener已停止错误

我试图为一个提交按钮添加一个onclick事件,但是当我将代码添加到我的应用程序中时,它使我出错并崩溃。 现在,我尝试了很多情况,但是当我停用此部分时,它就正确了。 我需要为我的提交按钮设置onclick事件。 我在目录中得到这个:
1回复

setOnClickListener(this)使我的应用程序崩溃?

我正在学习Android,这是我第一次遇到无法解决的错误(对我来说),所以我决定问你们。 对不起,我的帖子太乱了。 我一直试图分配Button来接收点击,但是每次我在MainActivity.java中放入setOnClickListener(this)时,它都会崩溃。 我认为这
2回复

setOnClickListener(this)使我的应用程序崩溃

我对btn.setOnClickListener(this)有问题。 我有一个简单的项目,效果很好,但是当我向按钮添加操作时,我收到消息: 当我评论btn.setOnClickListener(this)时,项目可以正常工作。 这是我的代码: 我的布局如下: 我不
3回复

Android Alert对话框使我的应用程序崩溃

每当我调试应用程序时,当我单击弹出对话框的按钮时,它就会崩溃。 我应该怎么做才能使该对话框起作用? 提前致谢...
13回复

如何以编程方式使Android应用程序崩溃?

我想使用acra测试崩溃报告,但第一步是我需要使用代码在Android中模拟致命崩溃。 任何的想法?
1回复

适用于admob的Android 2.2 Google库使应用程序崩溃

几周前我已经启动了一个应用程序,我的应用程序适用于每个Android版本。 我正在通过新的Google Play库使用admob服务(最近由google更改)。 但是我的应用在Android 2.2设备(擎天柱One)上崩溃了。 我已经在网上浏览了此错误,但找不到任何解决方案。 崩溃报告
1回复

从外部项目引用类使android应用程序崩溃

我需要在项目之间共享一些类,因此我将它们移至外部项目并添加了构建路径和引用。 现在,Android版本坏了,而桌面版本仍能正常运行。 我有什么想念的吗? 我从运行android应用程序获得的所有都是“停止工作”消息。 我发现了一些logcat数据。 抱歉,对logcat不太熟悉。
6回复

ImageView使应用程序崩溃

这个应用程序可以在我的android 2.1上完美地工作,但是当我在Galaxy S3 4.1.1上使用它时,它根本不起作用并且崩溃了 LogCat 这也是我的XML构建,我看到它是我张贴的图片,但是我不知道图片是什么问题,如果删除它,应用程序运行正常,但是我需要那里的图片
1回复

Android应用程序在Lollipop上崩溃了

嗨我在我的应用程序上使用谷歌许可证检查器它适用于API 19及以下,但在棒棒糖上崩溃。 我看到必须添加到我的许可证检查代码的代码,但我不知道在哪里放置此代码或我应该编辑什么。 这是我的代码 日志: Java代码: 这是我得到的其他代码,这可以解决我的问题。 但不知道放