我现在正在寻找答案,但仍然无法找到答案,所以让我们希望有人能帮助我。
我有X活动,我想将这些活动中的不同变量传递给一个活动。当我使用intent put extra时,它可以很好地从1个活动到最终活动,但是当我从2个活动到最终活动使用它时,应用程序崩溃了。有人能告诉我怎么做吗?
这是一个X活动的例子代码:
public class AkyluxClass extends Activity {
//Initialisation
double prix;
EditText longueur;
EditText largeur;
EditText quantite;
TextView total;
Button calcul, facturer, valider;
float coefficient;
public final static String COEF = "coefficient";
String test;
double num1, num2, num3, resultat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.akylux);
//Association layout / code
prix = 10.90;
longueur = (EditText) findViewById(R.id.longueur_akylux);
largeur = (EditText) findViewById(R.id.largeur_akylux);
quantite = (EditText) findViewById(R.id.quantite_akylux);
total = (TextView) findViewById(R.id.total_akylux);
calcul = (Button) findViewById(R.id.button_calcul_akylux);
facturer = (Button) findViewById(R.id.button_facturer);
valider = (Button) findViewById(R.id.valider_akylux);
coefficient = getPreferences(MODE_PRIVATE).getFloat(COEF, 1);
//Listener du bouton calcul
calcul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num1 = Double.parseDouble(longueur.getText().toString());
num2 = Double.parseDouble(largeur.getText().toString());
num3 = Double.parseDouble(quantite.getText().toString());
resultat = ((num1 * num2)/10000) * num3 * prix * coefficient;
total.setText(Double.toString(resultat));
if (num1 < 100) {
num1 = 100;
}
if (num2 < 100) {
num2 = 100;
}
if (num3 < 1) {
num3 = 1;
}
}
});
//Listener du bouton valider
valider.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String valStr = String.valueOf(resultat);
Intent intent = new Intent(AkyluxClass.this, DevisClass.class);
intent.putExtra("akylux", valStr);
startActivity(intent);
}
});
}
}
以下是最终活动的代码:
public class DevisClass extends Activity {
//Initialisation des variables
TextView valeur_akylux, valeur_blanc, valeur_carton, valeur_dibond, valeur_gris, valeur_pvc, total_Devis;
Button facturer;
double total_devis_double, resultat;
String total;
static AkyluxClass AkyluxClass;
static PvcClass PvcClass;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.devis);
//Association layout / code
facturer = (Button) findViewById(R.id.button_facturer);
valeur_akylux = (TextView) findViewById(R.id.valeur_akylux_devis);
valeur_blanc = (TextView) findViewById(R.id.valeur_blanc_devis);
valeur_carton = (TextView) findViewById(R.id.valeur_carton_devis);
valeur_dibond = (TextView) findViewById(R.id.valeur_dibond_devis);
valeur_gris = (TextView) findViewById(R.id.valeur_gris_devis);
valeur_pvc = (TextView) findViewById(R.id.valeur_pvc_devis);
total_Devis = (TextView) findViewById(R.id.total_Devis);
//On récupère la variable passée via l'intent de la première classe
String akylux_extra = (String) getIntent().getSerializableExtra("akylux");
//on l'attribue à un double pour avoir une valeur calculable
double valaky = Double.parseDouble(akylux_extra.trim());
//On l'affiche sur le label du layout
valeur_akylux.setText(Double.toString(valaky));
//Test : on l'attribue à un total
total_devis_double = Double.parseDouble(valeur_akylux.getText().toString());
//resultat = valaky + blanc + carton + dibond + gris + pvc;
resultat = valaky;
//On transforme le total en String
total = String.valueOf(total_devis_double);
//On affiche le String total
total_Devis.setText(total);
//Listener du bouton facturer
facturer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"rayan@eprint.fr"});
i.putExtra(Intent.EXTRA_SUBJECT, "Votre facture deviseur ePrint");
i.putExtra(Intent.EXTRA_TEXT , new String[]{"Voici le détail de votre facture : " , total, "total", "€"});
//i.putExtra(Intent.EXTRA_TEXT , new String[]{total});
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(DevisClass.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
}
});
}
}
感谢您的帮助
答案 0 :(得分:1)
对于String传递,您可以将接收类intent更改为读取String Extra,并添加null bundle check。错误日志有助于指出问题。也许数据不能以某种方式正确保存......
Bundle bdlExtra = getIntent().getExtras();
if(bdlExtra != null) {
String akylux_extra =bdlExtra.getString("akylux");
}
答案 1 :(得分:1)
假设您有一个家庭活动A和许多其他活动B,C,D,您希望将数据发送到活动A.
在活动A中,声明一个字符串标记:
public static final String TAG_ACTIVITY_FROM = "WhichActivity";
在其他活动中,发送:
//you can send as many data as you want in putExtra
Intent intent = new Intent(D.this, A.class);
intent.putExtra(A.TAG_ACTIVITY_FROM, "From_D");
intent.putExtra(A.VALUE, 4);
startActivity(intent);
在A中,用以下内容取回:
if (getIntent().getExtras() != null) {
String activityFrom =(String)getIntent().getStringExtra(TAG_ACTIVITY_FROM);
int value = getIntent().getIntExtra(VALUE, -1);
}
答案 2 :(得分:0)
如果它正在进行一项活动,那么对于下一个活动来说不应该是一个问题,除非您显示日志特别是错误,否则我们肯定不会知道显示,除了在Intents中添加额外内容之外,为什么不使用:
为您的整个应用使用分享原始数据类型是一种很好的方式。
干杯。
答案 3 :(得分:0)
我认为您可以使用静态变量或函数将类用作处理程序或控制器:
class Handler{
//value
public static Double result = 0.0;
//set of values
public static List<Double> resultArr = new ArrayList<>();
}
然后,您可以从任何其他类传递值并测试最终活动中的值,尤其是在多线程数据流程中。 希望帮助:)
答案 4 :(得分:0)
有很多方法可以做。 在你的第一个活动中。 MyFirstActivity.java
String password="password";
String mypassword="sfsdf234234";
Intent myintent = new Intent(MyFirstActivity.this,MySecondActivity.class);
myintent,putExtra("Email","rohit@gmail.com");
myintent.putExtra(password,mypassword);
startActivity(myintent);
现在来自您的第二项活动。 MySecondActivity.java可以通过这种方式获取数据。
Intent myintent = getIntent();
String myPassword =myintent.getExtra("password");
String myEmail =myintent.getEXtra("email");
希望这会对你有所帮助。 You can also check this post. Same concept.