Android应用程序部队在关闭另一个活动时关闭

问题描述:

我正在制作一个使用android 2.2和eclipse的android应用程序。Android应用程序部队在关闭另一个活动时关闭

有应用的两个工作流:

WF1:CoverPageApp -> LoginActivity -> Dashboard.

WF2:CoverPageApp -> RegisterActivity -> Dashboard.

但是当我点击在CoverPageApp开始按钮去另一个活动,即LoginActivity,应用程序部队关闭。 我也包括这表明空异常的LoginActivity的Java和错误文件指向上线51 logcat的: btnLinkToRegistrScrn = (Button) findViewById(R.id.LinkToRegisterScreen);

AndroidManifest.xml中

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

    <uses-sdk android:targetSdkVersion="15" android:minSdkVersion="8" /> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <activity 
      android:enabled="true" 
      android:name=".PageApp" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

     <activity 
      android:enabled="true" 
      android:name=".LoginActivity1" 
      android:label="Login Activity" > 
     </activity> 

     <activity 
      android:enabled="true" 
      android:name=".CAActivity" 
      android:label="Register Activity" > 
     </activity> 

     <activity 
      android:enabled="true" 
      android:name=".DashboardActivity" 
      android:label="Dashboard Activity" > 
     </activity> 

    </application> 

    </manifest> 

PageApp.java

import android.app.Activity; 
import android.os.Bundle; 
//import android.content.Context; 
import android.content.Intent; 
import android.widget.Button; 
import android.view.View; 

public class PageApp extends Activity { 

    Button startbutton; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.coverpage); 
     addListenerOnButton(); 
    } 


    public void addListenerOnButton() { 

     //final Context context1 = this; 

     startbutton = (Button) findViewById(R.id.button1); 

     startbutton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Intent intent1 = new Intent(arg0.getContext(), LoginActivity1.class); 
      // intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(intent1); 
       finish(); 
       } 
      }); 

    } 

} 

Log.java

import android.app.Activity; 
//import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
//import android.view.View.OnClickListener; 
import android.widget.Button; 
//import android.widget.TextView; 


public class Log extends Activity { 

    Button btnLinkToRegistrScrn; 
    Button loginbtn1; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 
    addListenerOnButton(); 
//  btnLinkToRegistrScrn = (Button) findViewById(R.id.LinkToRegisterScreen); 

    } 


    public void addListenerOnButton() { 

     //final Context context2 = this; 

      loginbtn1 = (Button) findViewById(R.id.btnLogin); 

      loginbtn1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       Intent intent = new Intent(arg0.getContext(), DashboardActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(intent); 
      } 

     }); 
    } 


    { 
     // Link to Register Screen 
     btnLinkToRegistrScrn = (Button) findViewById(R.id.LinkToRegisterScreen); 
     btnLinkToRegistrScrn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(v.getContext(), CAaactivity.class); 
       // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 
       } 
     }); 

    } 

    } 

logcat的

05-31 17:53:19.691: D/AndroidRuntime(1958): Shutting down VM 
05-31 17:53:19.710: W/dalvikvm(1958): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
05-31 17:53:19.730: E/AndroidRuntime(1958): FATAL EXCEPTION: main 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.os.Looper.loop(Looper.java:123) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at dalvik.system.NativeStart.main(Native Method) 
05-31 17:53:19.730: E/AndroidRuntime(1958): Caused by: java.lang.NullPointerException 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.Activity.findViewById\untime(1958): at java.lang.Class.newInstanceImpl(Native Method) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at java.lang.Class.newInstance(Class.java:1429) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
05-31 17:53:19.730: E/AndroidRuntime(1958):  ... 11 more 

改变你LoginActivity1活动为:

public class LoginActivity1 extends Activity { 

    Button btnLinkToRegistrScrn; 
    Button loginbtn1; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 
    addListenerOnButton(); 
     // Link to Register Screen 
     btnLinkToRegistrScrn = (Button) findViewById(R.id.LinkToRegisterScreen); 
     btnLinkToRegistrScrn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(v.getContext(), TrekEyesAndroidActivity.class); 
       // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 
       } 
     }); 
    } 
    public void addListenerOnButton() { 

     //final Context context2 = this; 

      loginbtn1 = (Button) findViewById(R.id.btnLogin); 

      loginbtn1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       Intent intent = new Intent(arg0.getContext(), DashboardActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(intent); 
      } 

     }); 
    } 
    } 

,并在XML改变的TextView按钮作为

<Button 
     android:id="@+id/LinkToRegisterScreen" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_marginTop="25dip" 

      android:textColor="#21dbd4" 
      android:textStyle="bold" 
      android:text="@string/noAccountRegisterME" /> 
+0

如果您在'addListenerOnButton()'中同时映射这两个按钮,会有什么区别? –

+0

@imran khan谢谢你这么多:)我一直在处理这个错误的1周,今天你在我的应用程序中解决了这个最大的错误。 ThankYou非常感谢:)我非常感谢你的帮助。现在我的应用程序运行顺利。 :))))) –

+1

@hotveryspicy:没问题,他可以同时在'addListenerOnButton()'中映射这两个按钮并使用相同的 –

在Login.xml

你宣布

<TextView 
    android:id="@+id/LinkToRegisterScreen" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

,并同时映射LoginActivity1.java

btnLinkToRegistrScrn = (Button) findViewById(R.id.LinkToRegisterScreen); 

所以才改变TextViewButton

<Button 
    android:id="@+id/LinkToRegisterScreen" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 
+0

谢谢!它解决了一半的问题,但是imran khan的答案解决了整个问题。不管怎么说,还是要谢谢你。:) –

在您的登录。 xml

<TextView 
      android:id="@+id/LinkToRegisterScreen" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_marginTop="25dip" 

      android:textColor="#21dbd4" 
      android:textStyle="bold" 
      android:text="@string/noAccountRegisterME" /> 

android:id="@+id/LinkToRegisterScreen",这是EditText上和你正在做btnLinkToLoginScrn = (Button) findViewById(R.id.LinkToLoginScreen);所以这将是空指针..

所以只是改变按钮,而不是TextView的在你的login.xml

+0

它不是'EditText',它是'TextView'。 –

+0

@CapDroid谢谢! –

我觉得你应该集中大括号。你给代码添加listeneraddListenerOnButton()