无法从android studio的第一个活动中打开第二个活动

无法从android studio的第一个活动中打开第二个活动

问题描述:

以下是清单文件。无法从android studio的第一个活动中打开第二个活动

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.paidquery.mobile"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".LoginActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".SignUpActivity" 
      android:label="@string/title_activity_sign_up" 
      android:theme="@style/AppTheme.NoActionBar"> 
     </activity> 
    </application> 

</manifest> 

这是登录活动的java文件,我在哪里写上点击功能,这也是我的第一个活动。我看到两个控制台登录到我的控制台,但每当点击注册按钮时,应用程序就会自行关闭,并在控制台中发出错误,表示找不到注册活动。

package com.paidquery.mobile; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Button; 

public class LoginActivity extends AppCompatActivity{ 

    public static final String LOGIN_TAG = "login_msg"; 
    private static Button sign_up_btn; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 


     onClickSignUpBtnListner(); 
     Log.i(LOGIN_TAG, "Login onCreate function"); 
    } 

    /** Sign up button click function */ 

    public void onClickSignUpBtnListner() { 

     Log.i(LOGIN_TAG,"In onClickSignUpBtnListner call"); 
     sign_up_btn = (Button)findViewById(R.id.signUpBtn); 

     sign_up_btn.setOnClickListener(
      new View.OnClickListener(){ 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(LoginActivity.this, SignUpActivity.class); 
        startActivity(intent); 
       } 
      } 
     ); 

    } 
} 

这里是最新的控制台日志错误,当我点击注册按钮的登录活动。

01-13 16:25:18.844 28104-28104/com.paidquery.mobile E/AndroidRuntime:致命异常:主 工艺:com.paidquery.mobile,PID:28104 了java.lang.RuntimeException:无法开始活动ComponentInfo {com.paidquery.mobile/com.paidquery.mobile.SignUpActivity}:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()'上的空对象引用 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在android.app.ActivityThread.-wrap11(ActivityThread。 java) at android.app.ActivityThread $ h.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java: 148) 在android.app.ActivityThread.main(ActivityThread.java:5417) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit .java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.NullPointerException:试图调用虚拟方法'java.lang.CharSequence android.support。 v7.widget.Toolbar.getTitle()'的空对象ref在android.support.v7.widget.ToolbarWidgetWrapper(ToolbarWidgetWrapper.java:98) at android.support.v7.widget.ToolbarWidgetWrapper。(ToolbarWidgetWrapper.java:91) at android.support.v7.app.ToolbarActionBar (ToolbarActionBar.java:73) 在android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:205) 在android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99) 在com.paidquery.mobile.SignUpActivity.onCreate(SignUpActivity.java:17) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callA ctivityOnCreate(Instrumentation.java:1107) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在android.app.ActivityThread.-wrap11 (ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper (Native Method) (android)在com.android。internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

+1

检查manifest.xml。在其中声明SignUpActivity。 – Shane

+1

是你的清单包含'SignUpActivity'活动? –

+0

下面是清单文件。 –

正如在评论你的OP说,我们需要码。

然而,这是活动开始活动最常见的方式。

假设如下:

public class MainActivity extends Activity { 

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

     Button sign_up_btn = (Button) findViewById(R.id.sign_up_btn); 
     sign_up_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // start activity sign up here : 
       Intent intent = new Intent(MainActivity.this, SignUpActivity.class); 
       startActivity(intent); 
      } 
    } 
} 

然而,也如评论所说,你必须声明你的的AndroidManifest.xml文件中的每个活动。

里面的<application> </application>范围,您SignUpActivity如下:

<activity android:name="SignUpActivity"/> 

确保你写包含此活动,如果你把它放在一个特定的包的包的名称。无需写下您的应用程序包,因为它应该在清单中声明为好。

同时也要确保有您的电话活动中适当的进口(在我的例子中,MainActivity),而Android Studio将会帮你。

[更新1]

鉴于你的崩溃日志和评论,错误的是,你的工具栏SignUpActivity内不存在,所以当你试图找到它返回

这是因为在你的AndroidManifest文件中声明你的SignUpActivity的他们被设置为删除工具栏:

<activity [...] android:theme="@style/AppTheme.NoActionBar"> </activity>

因此,你应该使用另一个主题。要做到这一点,修改styles.xml文件,其中AppTheme定义和改变这样的事情:

<style name="AppTheme" parent="Base.Theme.AppCompat.DarkActionBar">

,瞧你现在可以在你的SignUpActivity使用工具栏。

+0

正如我的答案中所述:1)如果相同,则无需指定包含** SignUpActivity **的软件包正如您的** AndroidManifest **开头所述。请删除'“com.paidquery.mobile”'。 2)你创建** Intent **的方式用于行动,这不是你想要做的事情。尝试如下:'Intent intent = new Intent(LoginActivity.this,SignUpActivity.class)'。它应该如我的答案中所述那样工作。 – Mackovich

+0

我已经更新了主文章机智当前代码。不工作,错误:无法启动活动ComponentInfo {com.paidquery.mobile/com.paidquery.mobile.SignUpActivity} –

+0

您能发布完整的错误堆栈日志吗? – Mackovich

请仔细阅读Intent构造。

您使用Intent (String action)new Intent("com.paidquery.mobile.SignUpActivity")),开始你的第二个活动。

Androdi会认为com.paidquery.mobile.SignUpActivity意图操作过滤器,它在manifest.xml文件中不可用。

你的代码更改为:

Intent intent = new Intent(LoginActivity.this, SignUpActivity.class); 
startActivity(intent); 
+0

现在,在控制台中出现此错误。 –

+0

无法启动活动ComponentInfo {com.paidquery.mobile/com.paidquery.mobile.SignUpActivity} –

+0

尝试为清单中的SignUpActivity移除标记(及其操作)。 – Rami

它的崩溃,因为SignUpActivity.java号线17

我认为你正在尝试设置自定义actionbar/toolbar但在你的第二个xml(对于SignUpActivity)中没有提及。