-4

我使用過Android Studio 2.3 檢驗設備(天工 - 天工 - 6.0 Marshallow)。安卓:活動之間的導航

我是新來android應用程序開發.. 我有3活動(MainActivity,DisplayMessageActivity和ReadMessageActivity).screens。

我可以從MainActivity來回導航,MainActivity是作爲子活動的DisplayMessageActivity的ParentActivity,以及從DisplayMessageActivity到ReadMessageActivity的來源。

但我不能從導航回ReadMessageActivity的DisplayMessageActivity。 當我這樣做時,應用程序崩潰,錯誤「不幸的是,AppName已停止。」

這個程序能正常工作......只是要回2號活動時,第三活動崩潰的應用程序。

請參閱下面的AndroidManifest.xml和不同的Activity.xml代碼,並幫助我完成這個挑戰。 預先感謝您。

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    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=".DisplayMessageActivity" 
     android:parentActivityName=".MainActivity" 
     android:label="@string/welcome_screen_title" 
     android:finishOnTaskLaunch="true" 
     android:launchMode="standard"> 

     <!-- The meta-data tag is required if you support API level 15 and lower --> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
    </activity> 


    <activity android:name=".ReadMessageActivity" 
     android:parentActivityName=".DisplayMessageActivity" 
     android:label="@string/question_screen" 
     android:allowTaskReparenting="true"> 

     <!-- The meta-data tag is required if you support API level 15 and lower --> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".DisplayMessageActivity" /> 
    </activity> 
</application> 

MainActivity.xml

package com.example.examinationportal; 
import android.content.Intent; 
import android.graphics.Color; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 
    String message = ""; 

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

    /** Called when the user taps the Send button */ 
    public void loginUser(View login) { 
     Intent intent = new Intent(this, DisplayWelcomeScreen.class);//start the ui 
     //initialize the status bar textview control 
     TextView statusBar = (TextView) findViewById(R.id.textViewStatusMsg); 
     //initialize textViewLogin 
     TextView titleLogin = (TextView) findViewById(R.id.textViewLogin) ; 
     titleLogin.setTextColor(0x01060013);//colors 

     EditText un = (EditText) findViewById(R.id.editTextUsername);//username field 
     EditText pw = (EditText) findViewById(R.id.editTextPassword);//password field 

     String username = un.getText().toString();//convert username and password to string and parse 
     String password = pw.getText().toString();//them to variables 

     //check the login 
     if(username.equals("admin") && password.equals("admin")){//compare the username and password entered by user with the defaul 
      message = "Welcome"; //message for successful login 
      String msg = "Login Successful!";//this message will be displayed on the status bar 
      statusBar.setTextColor(Color.parseColor("#ff0000")); 
      statusBar.setBackgroundColor(Color.parseColor("#d3d3d3")); 
      statusBar.setText(msg);//disp the msg for unsuccessful login 

      Bundle bundle = new Bundle();//bundle the message and parse it to the next activity 
      bundle.putString("dispMsg", message);//bundle the message using the variable dispMsg 
      intent.putExtras(bundle); 
      startActivity(intent); 
     }else{ 
      message = "Invalid Login! You are not authorised to view this page..."; 

      //statusBar.setText(null);//status bar textview 
      //statusBar.setTextColor(getResources().getColor(R.color.colorAccent)); 
      //statusBar.setTextColor(ContextCompat.getColor(context, R.color.colorAccent)); 
      statusBar.setTextColor(Color.parseColor("#ff0000")); 
      statusBar.setBackgroundColor(Color.parseColor("#d3d3d3")); 
      statusBar.setText(message);//disp the msg for unsuccessful login 
     } 

    } 
} 

DisplayMessageActivity.xml

package com.example.examinationportal; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class DisplayWelcomeScreen extends AppCompatActivity { 

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


    // Get the Intent that started this activity and extract the string 
    Intent intent = getIntent(); 
    Bundle bundle = getIntent().getExtras(); 
    String showMsg = bundle.getString("dispMsg"); 

    // Capture the layout's TextView and set the string as its text 
    TextView textView = (TextView) findViewById(R.id.textViewWelcome); 
    textView.setText(showMsg); 

     //disable some controls when user is not logged in 
     View buttonCSS342 = findViewById(R.id.buttonCSS342); 



     View buttonCSS352 = findViewById(R.id.buttonCSS352); 
     View buttonCSS354 = findViewById(R.id.buttonCSS354); 
     View buttonCSS356 = findViewById(R.id.buttonCSS356); 
     View buttonCSS381 = findViewById(R.id.buttonCSS381); 
     View buttonPCR362 = findViewById(R.id.buttonPCR362); 
    } 
public void courseClicked(View v) { 

     String course = ""; 
     Intent intent = new Intent(this, CSS_342_Questions.class); 
     int qNum = 0; 

     switch (v.getId()){ 
      case R.id.buttonCSS342: 
       course = "CSS 342"; 
       qNum=1; 
       break; 
      case R.id.buttonCSS352: 
       course = "CSS 352"; 
       qNum=1; 
       break; 
      case R.id.buttonCSS354: 
       course = "CSS 354"; 
       qNum=1; 
       break; 
      case R.id.buttonCSS356: 
       course = "CSS 356"; 
       qNum=1; 
       break; 
      case R.id.buttonCSS381: 
       course = "CSS 381"; 
       qNum=1; 
       break; 
      case R.id.buttonPCR362: 
       course = "PCR 362"; 
       qNum=1; 
       break; 
     } 
     Bundle bundle = new Bundle(); 
     bundle.putString("dispCode", course); 
     bundle.putInt("qNum", qNum); 
     intent.putExtras(bundle); 

     startActivity(intent); 

    } 
} 

ReadMessageActivity.xml

package com.example.examinationportal; 


import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.Button; 
import android.widget.TextView; 

import org.w3c.dom.Text; 

public class CSS_342_Questions extends AppCompatActivity { 
    public int qNum = 0; 
    public String showCode =""; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_css_342__questions); 

     // Get the Intent that started this activity and extract the string 
     Intent intent = getIntent(); 
     Bundle bundle = getIntent().getExtras(); 
     showCode = bundle.getString("dispCode"); 
     qNum = bundle.getInt("qNum"); 

     TextView textView = (TextView) findViewById(R.id.textViewCourseTitle); 
     TextView qn = (TextView)findViewById(R.id.textViewQn); 
     TextView q = (TextView)findViewById(R.id.textViewQ); 

     WebView ans = (WebView) findViewById(R.id.textViewAns); 
     ans.getSettings().setLoadsImagesAutomatically(true); 
     ans.getSettings().setJavaScriptEnabled(true); 
     ans.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     ans.getSettings().setBuiltInZoomControls(true); 

View buttonPrev = findViewById(R.id.buttonPrevious); 
     View buttonNext = findViewById(R.id.buttonNext); 

     if(showCode.equals("CSS 342") && qNum == 1) { 
      String showTitle = "Safety Management and Loss Prevention"; 
      textView.setText(showTitle);// Capture the layout's TextView and set the string as its text 
      qn.setText(Questions.css342_q1[0]); 
      q.setText(Questions.css342_q1[1]); 
      ans.loadUrl("file:///android_asset/css342_q1.html"); 
      buttonPrev.setVisibility(View.INVISIBLE); 
      qNum = 1; 
     }else if(showCode.equals("CSS 352") && qNum == 1){ 
      String showTitle = "Crime and Crime Theories"; 
      // Capture the layout's TextView and set the string as its text 
      textView.setText(showTitle); 
      qn.setText(Questions.css352_q1[0]); 
      q.setText(Questions.css352_q1[1]); 
      ans.loadUrl("file:///android_asset/css352_q1.html"); 
      buttonPrev.setVisibility(View.INVISIBLE); 
      qNum = 1; 
} 
    } 
} 
+0

把你的堆棧跟蹤與例外這裏 –

+0

我是新來的Android應用開發......請我怎麼從Studio中的堆棧跟蹤? – user3134352

+0

@Luiz,我想我已經找到了 – user3134352

回答

0

更新您的AndroidManifest.xml如下:

................. 
......................... 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    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=".DisplayWelcomeScreen" 
     android:label="@string/welcome_screen_title"> 

    </activity> 

    <activity android:name=".CSS_342_Questions" 
     android:label="@string/question_screen"> 

    </activity> 
</application> 

............... 
....................... 

CleanRun您的應用程序。希望它的工作〜

+0

我喜歡你的熱情......但你的回答不起作用......而是將「向上」按鈕從其位置上移開。我必須按設備上的取消按鈕才能返回。請我需要更多幫助。 – user3134352

+0

@Luiz,我想我已經找到了logcat的堆棧跟蹤......下面是它...崩潰 的 ---------開始04-13 17:33:16.038 579-579/COM。 example.examinationportal E/AndroidRuntime: 致命異常:主要過程:com.example.examinationportal,PID:579了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.examinationportal/com.example.examinationportal。DisplayWelcomeScreen}:顯示java.lang.NullPointerException:嘗試調用虛擬方法 'java.lang.String中android.os.Bundle.getString(java.lang.String中)' – user3134352

+0

上在android.app.ActivityThread.performLaunchActivity空對象引用( ActivityThread.java:2572)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654)在android.app.ActivityThread.-wrap11(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java: 1488)at android.os.Handler.dispatchMessage(Handler.java:111)at android.os.Looper.loop(Looper.java:207)at android.app.ActivityThread.main(ActivityThread.java:5763)at java。 lang.reflect.Method.invoke(本機方法) – user3134352