在Android应用中

时间:2017-05-11 07:57:24

标签: java android variables android-activity

我现在正在寻找答案,但仍然无法找到答案,所以让我们希望有人能帮助我。

我有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();
            }
        }
    });
}
}

感谢您的帮助

5 个答案:

答案 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.