-4

Androidスタジオ2.3 テストデバイス(Tecno-Tecno-6.0 Marshallow)を使用しています。Android:アクティビティ間の移動

私はアンドロイドアプリ開発の新人です。 私は3つのアクティビティ(MainActivity、DisplayMessageActivity、ReadMessageActivity).screensを持っています。

私は、子アクティビティであるDisplayMessageActivityへのparentActivityであり、DisplayMessageActivityからReadMessageActivityへのMainActivityから前後にナビゲートすることができます。

しかし、私はReadMessageActivityからDisplayMessageActivityに戻ることはできません。 これを実行すると、アプリケーションがエラー "でクラッシュします。残念ながら、AppNameがを停止しました。"

このアプリはうまくいきます...ただし、2番目のアクティビティに戻ると3番目のアクティビティがクラッシュします。

下記の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

私はアンドロイドアプリデベロッパーが初めてです...スタジオからstackTraceを取得するにはどうすればよいですか? – user3134352

+0

@ルイズ、私は – 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

@ルーズ、私はLogCat Stack Traceを見つけたと思う...以下はそれだ... ---------クラッシュの始まり 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)'を呼び出そうとしました。android.app.ActivityThread.performLaunchActivityのnullオブジェクト参照に – user3134352

+0

ActivityThread.java:2572)のandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654)android.app.ActivityThread.-wrap11(ActivityThread.java)android.app.ActivityThread $ H.handleMessage(ActivityThread.java: 1488)android.os.Handler.dispatchMessage(Handler.java:111)android.os.Looper.loop(Looper.java:207)android.app.ActivityThread.main(ActivityThread.java:5763)at java。 lang.reflect.Method.invoke(ネイティブメソッド) – user3134352

関連する問題