2017-04-12 150 views
-3

這是我爲Android Studio中的學校項目構建的第一個應用程序,我試圖通過按鈕單擊將數據發送到MainActivity的另一活動。當我點擊按鈕時,該應用程序崩潰。 screenshot of the error我不知道它在哪裏失敗以及修復是什麼。通過意圖開始新活動時,應用程序崩潰

這是MainActivity.java

public class MainActivity extends AppCompatActivity { 
public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; 
private EditText maxticketSrc; 

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

    public void sendMessage(View view) { 
     Intent intent = new Intent(this, ScanActivity.class); 
     EditText eventSrc = (EditText) findViewById(R.id.eventEditTxt); 
     EditText sectorSrc = (EditText) findViewById(R.id.sectorEditTxt); 
     EditText minticketSrc = (EditText) findViewById(R.id.minticketEditTxt); 
     maxticketSrc = (EditText) findViewById(R.id.maxticketEditTxt); 
     String eventTxt = eventSrc.getText().toString(); 
     String sectorTxt = sectorSrc.getText().toString(); 
     String minticketTxt = minticketSrc.getText().toString(); 
     String maxticketTxt = maxticketSrc.getText().toString(); 
     String message = eventTxt + "-" + sectorTxt + "-" + minticketTxt + "-" + maxticketTxt; 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 
    } 

} 

這是activity_main.xml中

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.abinodh.ddm.ticketvalidator.ScanActivity"> 

<TextView 
    android:id="@+id/tv_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:text="Event Setup Wizard" 
    android:textSize="20sp" 
    android:textStyle="bold" 
    app:layout_constraintHorizontal_bias="0.452" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="28dp" /> 

<TextView 
    android:id="@+id/textView" 
    android:layout_width="171dp" 
    android:layout_height="35dp" 
    android:text="Event ID:" 
    android:textSize="20sp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.117" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.191" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="172dp" 
    android:layout_height="34dp" 
    android:text="Max Ticket No:" 
    android:textAlignment="textStart" 
    android:textSize="20sp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.117" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.572" /> 

<TextView 
    android:id="@+id/textView4" 
    android:layout_width="171dp" 
    android:layout_height="34dp" 
    android:text="Min Ticket No:" 
    android:textAlignment="textStart" 
    android:textSize="20sp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.117" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.44" /> 

<TextView 
    android:id="@+id/textView3" 
    android:layout_width="171dp" 
    android:layout_height="33dp" 
    android:text="Sector ID:" 
    android:textAlignment="textStart" 
    android:textSize="20sp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.117" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.313" /> 

<EditText 
    android:id="@+id/maxticketEditTxt" 
    android:layout_width="160dp" 
    android:layout_height="34dp" 
    android:ems="10" 
    android:inputType="number" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.875" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.572" /> 

<EditText 
    android:id="@+id/minticketEditTxt" 
    android:layout_width="161dp" 
    android:layout_height="34dp" 
    android:ems="10" 
    android:inputType="number" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.878" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.44" /> 

<EditText 
    android:id="@+id/sectorEditTxt" 
    android:layout_width="161dp" 
    android:layout_height="33dp" 
    android:ems="10" 
    android:inputType="number" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.878" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.313" /> 

<EditText 
    android:id="@+id/eventEditTxt" 
    android:layout_width="161dp" 
    android:layout_height="35dp" 
    android:ems="10" 
    android:inputType="number" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintHorizontal_bias="0.878" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.191" /> 

<Button 
    android:id="@+id/setupWizSubmitBtn" 
    android:layout_width="188dp" 
    android:layout_height="66dp" 
    android:text="Submit" 
    android:onClick="sendMessage" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/textView2" /> 

的XML佈局來源,這是ScanActivity.java

public class ScanActivity extends AppCompatActivity implements View.OnClickListener { 

Intent intent = getIntent(); 
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
String[] messageArray = message.split("-"); 
int eventData = Integer.parseInt(messageArray[0]); 
int sectorData = Integer.parseInt(messageArray[1]); 
int minticketData = Integer.parseInt(messageArray[2]); 
int maxticketData = Integer.parseInt(messageArray[3]); 

private TextView resultTxt, contentTxt; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_scan); 
    Button scanBtn = (Button) findViewById(R.id.scan_button); 
    resultTxt = (TextView)findViewById(R.id.scan_format); 
    contentTxt = (TextView)findViewById(R.id.scan_content); 
    scanBtn.setOnClickListener(this); 
} 
public void onClick(View v){ 
    if(v.getId()==R.id.scan_button){ 
     IntentIntegrator scanIntegrator = new IntentIntegrator(this); 
     scanIntegrator.initiateScan(); 
    } 
} 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); 
    if (scanningResult != null) { 
     Boolean validity = true; 
     String scanContent = scanningResult.getContents(); 
     String[] resultArr = scanContent.split("-"); 
     int event = Integer.parseInt(resultArr[0]); 
     int sector = Integer.parseInt(resultArr[1]); 
     int ticket = Integer.parseInt(resultArr[2]); 
     String validityStr; 
     if(event != eventData) 
     { 
      validity = false; 
     } 
     if(sector != sectorData) 
     { 
      validity = false; 
     } 
     if(ticket < minticketData || ticket > maxticketData) 
     { 
      validity = false; 
     } 
     if (validity) 
      validityStr = "Valid"; 
     else 
      validityStr = "Not Valid"; 
     resultTxt.setText("Event: " + event + "\nSector: " + sector + "\nTicket Number: " + ticket + "\nValidity: " + validityStr); 
     contentTxt.setText("Scan Result: " + scanContent); 
    } 
    else{ 
     Toast toast = Toast.makeText(getApplicationContext(), 
       "No scan data received!", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

}

這裏面activity_scan.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.abinodh.ddm.ticketvalidator.MainActivity"> 

<Button 
    android:id="@+id/scan_button" 
    android:layout_width="368dp" 
    android:layout_height="134dp" 
    android:layout_centerHorizontal="true" 
    android:text="SCAN" 
    android:textSize="45sp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.029" /> 

<TextView 
    android:id="@+id/scan_format" 
    android:layout_width="333dp" 
    android:layout_height="221dp" 
    android:layout_below="@id/scan_button" 
    android:layout_centerHorizontal="true" 
    android:text="Please Scan" 
    android:textAlignment="center" 
    android:textIsSelectable="true" 
    android:textSize="30sp" 
    android:textStyle="bold" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 

<TextView 
    android:id="@+id/scan_content" 
    android:layout_width="409dp" 
    android:layout_height="43dp" 
    android:text="Content" 
    android:textAlignment="center" 
    android:textSize="20sp" 
    android:textStyle="bold" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.82" 
    app:layout_constraintHorizontal_bias="0.48" /> 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="179dp" 
    android:layout_height="70dp" 
    app:srcCompat="@mipmap/ic_launcher" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.988" /> 

<android.support.constraint.Guideline 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/guideline" 
    app:layout_constraintGuide_begin="20dp" 
    android:orientation="horizontal" 
    tools:layout_editor_absoluteY="20dp" 
    tools:layout_editor_absoluteX="0dp" /> 

</android.support.constraint.ConstraintLayout> 
+2

將您的堆棧跟蹤放在這裏 –

回答

0

問題是你如何訪問意圖,它是第二項活動的額外費用。

從:

Intent intent = getIntent(); 
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
String[] messageArray = message.split("-"); 
int eventData = Integer.parseInt(messageArray[0]); 
int sectorData = Integer.parseInt(messageArray[1]); 
int minticketData = Integer.parseInt(messageArray[2]); 
int maxticketData = Integer.parseInt(messageArray[3]); 

protected void onCreate(Bundle savedInstanceState){ 
    ... 
} 

:當所述類被加載或由框架實例化

Intent intent; 
String message ; 
String[] messageArray; 
int eventData; 
int sectorData; 
int minticketData; 
int maxticketData; 

protected void onCreate(Bundle savedInstanceState) { 
    ... 

    intent = getIntent(); 
    message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
    messageArray = message.split("-"); 
    eventData = Integer.parseInt(messageArray[0]); 
    sectorData = Integer.parseInt(messageArray[1]); 
    minticketData = Integer.parseInt(messageArray[2]); 
    maxticketData = Integer.parseInt(messageArray[3]); 
} 

意圖是不可用的。

將所有類字段初始化移至onCreate方法。 getIntent()方法將實際返回對象和所有它的額外。

+1

謝謝羅伯特!有效! :) –

+0

下次發佈您的logcat輸出,這使得一切更容易排除故障:) –

0

代碼替換intent.putExtra(EXTRA_MESSAGE, message);intent.putExtra("EXTRA_MESSAGE", message);

和檢索這樣:String message = getIntent().getExtras().getString("EXTRA_MESSAGE");

請在你的問題提供logcat的錯誤,所以我們可以幫你。

+0

這是邏輯: 用戶輸入信息,如事件ID,扇區ID,主活動文本字段中的最小和最大票證號碼。用戶按下按鈕之後,此信息將傳遞到掃描活動中,並與來自條形碼閱讀器的數據進行比較。 –

0

@Override

保護無效的onCreate(捆綁savedInstanceState){

super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_main); 

    EditText eventSrc = (EditText) findViewById(R.id.eventEditTxt); 
    EditText sectorSrc = (EditText) findViewById(R.id.sectorEditTxt); 
    EditText minticketSrc = (EditText) findViewById(R.id.minticketEditTxt); 
    maxticketSrc = (EditText) findViewById(R.id.maxticketEditTxt); 
    Button setupWizSubmitBtn =(Button) findViewByID(R.id.setupWizSubmitBtn); 

setupWizSubmitBtn.setOnClickListner(新OnClickListner() {

@Override 

    public void onClick(View v) { 

    Intent intent = new Intent(this, ScanActivity.class); 
    String eventTxt = eventSrc.getText().toString(); 
    String sectorTxt = sectorSrc.getText().toString(); 
    String minticketTxt = minticketSrc.getText().toString(); 
    String maxticketTxt = maxticketSrc.getText().toString(); 
    String message = eventTxt + "-" + sectorTxt + "-" + minticketTxt + "-" +     maxticketTxt; 
    intent.putExtra(EXTRA_MESSAGE, message); 
    startActivity(intent); 
} 

});

}

1

您是否試過在manifest中添加Activity? 請添加並嘗試運行該應用程序。

相關問題