无法打开第二个活动

时间:2019-05-22 20:50:27

标签: java android

我和我的同学正在开发一个食谱应用程序,我们遇到了错误。我们不能以意图开始第二个活动。有什么建议吗?

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.loginpage">
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="Foodly"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".RecipeList"
        android:label="@string/title_activity_recipes_list"
        android:theme="@style/AppTheme.NoActionBar"></activity>
    <activity android:name=".WelcomeActivity" />
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>


Java代码活动1

public class MainActivity extends AppCompatActivity {
    private EditText name;
    private EditText passwd;


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




    public void onButtonClick(View v) {


        name = (EditText)findViewById(R.id.editText2);
        passwd = (EditText)findViewById(R.id.editText1);
        String wrong = "Wrong Credentials";
        String userinput = name.getText().toString();
        String userinput2 = passwd.getText().toString();
        //boolean t = LoginManager.isKnownUser(userinput,userinput2);

        if (LoginManager.isKnownUser(userinput, userinput2)) {

            Intent intent = new Intent(this, WelcomeActivity.class);
            startActivity(intent);

        } else {
            Toast.makeText(getApplicationContext(), wrong, Toast.LENGTH_LONG).show();
        }
    }


}

登录管理器

package com.example.loginpage;



public class LoginManager {

    public static boolean isKnownUser(String name, String passwd) {
        if (name.equals("Otoi") && passwd.equals("1234")) {
            return true;
        } else {
            return false;
        }
    }

}
  

E / AndroidRuntime:致命异常:主要过程:   com.example.loginpage,PID:3091 java.lang.RuntimeException:无法   实例化活动ComponentInfo {com.example.loginpage /   com.example.loginpage.WelcomeActivity}:   java.lang.NullPointerException:尝试调用虚拟方法   'java.lang.String android.content.Context.getPackageName()'在null上   对象引用位于   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:   2843)在   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:   3048)在   android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:   78)在   android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:   108)   android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:   68)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:   1808),位于android.os.Handler.dispatchMessage(Handler.java:106)   android.os.Looper.loop(Looper.java:193)在   android.app.ActivityThread.main(ActivityThread.java:6669)位于   java.lang.reflect.Method.invoke(本机方法)位于   com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:   493),位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)   原因:java.lang.NullPointerException:尝试调用虚拟   方法'java.lang.String android.content.Context.getPackageName()'   位于的空对象引用   android.content.ContextWrapper.getPackageName(ContextWrapper.java:   142)at android.content.ComponentName。      在

  android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:   78)

     在

  android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:   108)

     在

  android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:   68)

     android.app.ActivityThread $ H.handleMessage(ActivityThread.java中的

  1808),位于android.os.Handler.dispatchMessage(Handler.java:106)   android.os.Looper.loop(Looper.java:193)在   android.app.ActivityThread.main(ActivityThread.java:6669)位于   java.lang.reflect.Method.invoke(本机方法)位于   com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:   493)

     

在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

2 个答案:

答案 0 :(得分:1)

可能需要这样修改AndroidManifest.xml:

<application
    android:allowBackup="true"
    android:name="org.mydomain.mycompany.MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="Foodly"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".WelcomeActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>

    <activity
        android:name=".RecipeList"
        android:label="@string/title_activity_recipes_list"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>

</application>

您将需要将应用程序对象名称命名为完全限定的路径名​​(至您的MyApplication.java文件),然后,我将意图过滤器添加到android.intent.action.MAIN中的所有动作中,而不是只是发射器活动。我还完全限定了LAUNCHER活动的名称,其余的可以使用.WelcomeActivity命名约定。

答案 1 :(得分:0)

您能描述一下onButtonClick函数何时调用吗? 我认为您犯了一些小错误。 请正确描述您的代码,并以屏幕截图的形式给出错误信息,以使其易于理解。