Передача данных между Intents приводит к неожиданному закрытию приложения - PullRequest
0 голосов
/ 18 июня 2011

Я пытаюсь передать значение int между двумя действиями, используя намерения, но мое приложение продолжает сбой Когда я комментирую передачу любых данных и просто использую намерение, все, кажется, работает. Я не могу сказать, что не так.

Задание 1 (HeartRateActivity):

//Imports

public class HeartRateActivity extends Activity {
/** Called when the activity is first created. */
Button nextActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    nextActivity = (Button)findViewById(R.id.nextActivity);

    nextActivity.setOnClickListener(new Button.OnClickListener(){

        @Override
public void onClick(View v) {
    Intent intent = new Intent(HeartRateActivity.this, NextActivity.class);
    intent.putExtra("age", 2);
    startActivity(intent);
}

    });

}
}

My NextActivity.java

package com.heartRate;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;



public class NextActivity extends Activity {
TextView display;
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.next);
       int age = getIntent().getIntExtra("age", 0);
       display = (TextView) findViewById(R.id.display);
       display.setText(age);
}
}

Мой AndroidManifest.xml:

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

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".HeartRateActivity"
            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:name=".NextActivity" 
      android:label="@string/app_name" />
</application>
</manifest>

Мой main.xml (используется HeartRateActivity)

 <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
 >
 <TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
 />
 <Button android:layout_width="wrap_content" android:layout_height="wrap_content"  
 android:id="@+id/nextActivity" android:text="nextActivity"></Button>
</LinearLayout>

Мой next.xml (используемый NextActivity) похож, и я не думаю, что в этом проблема ...:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
 <TextView android:text="TextView" android:layout_width="wrap_content" 
 android:layout_height="wrap_content" android:id="@+id/display"></TextView>

 </LinearLayout>

Буду признателен за помощь в решении этой проблемы! Спасибо

Ответы [ 5 ]

3 голосов
/ 18 июня 2011

Заменить

display.setText(age);

с

display.setText(Integer.toString(age));

Если вы предоставляете int в качестве параметра, он использует его в качестве идентификатора ресурса, которого в данном случае, очевидно, не существует.

1 голос
/ 18 июня 2011

Убедитесь, что ваш Id и Intent Destination все в порядке.

затем просто поместите между намерением от инициализации и начала. с положением

intent.putExtra("age", Double);

от получить это.

double d = getIntent().getStringExtra("age");
1 голос
/ 18 июня 2011

просто попробуйте сделать вот так.

display = (TextView) findViewById (R.id.display);

display.setText (Integer.toString (age));

и наверняка это будет работать

0 голосов
/ 18 июня 2011

Убедитесь, что R.id.display является действительным TextView в вашем next макете.

0 голосов
/ 18 июня 2011

Просто, чтобы мы поняли, вы говорите, когда включаете ...

intent.putExtra("age", 2); 

в отправляющей активности, а ...

int age = getIntent().getIntExtra("age", 0);

в получающем действии приложение вылетает или сталкивается с проблемами? И, исключая эти 2 заявления, приложение работает нормально? Мне просто интересно, что показывает LogCat? Даже при сбое приложения LogCat будет иметь несколько записей о том, что происходило непосредственно перед закрытием.

...