NullPointerException при передаче двойника из одного класса в другой с помощью Intent - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь передать двойное значение из одного класса (MaterialCollect) в другой класс (Main Activity).Я получаю ошибку NullPointerException в своем классе Main Activity, когда пытаюсь определить rho_m.Я следовал за прохождением двойного безуспешно.Я приложил пример моих файлов классов MainActivity, MaterialCollect и MatrixBase.Согласно logcat, проблема заключается в том, что не удалось создать новый пакет.Я новичок в Java, спасибо.

public class MainActivity extends Activity{

double rho_m;
double E_maxial;
double E_mtrans;
double UTS_m;
double v_m;

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    Intent intent;
    intent = new Intent(MainActivity.this, MaterialCollect.class);
    startActivity(intent);

    Intent it = new Intent();
    Bundle nylon66params = it.getExtras();
    rho_m = nylon66params.getDouble("nylon66.matrixrho");
    Log.d("print out","THE VALUE OF " + Double.toString(rho_m));


 }}

MaterialCollect класс:

public class MaterialCollect extends AppCompatActivity {

MatrixBase nylon66 = new MatrixBase(1140, 2.7e9, 2.7e9, 2800e6, 0.33);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent it = new Intent(MaterialCollect.this, MainActivity.class);
    Bundle nylon66values = new Bundle();
    nylon66values.putDouble("nylon66.matrixrho", nylon66.matrixrho);
    nylon66values.putDouble("nylon66.matrixaxialTmodulus", nylon66.matrixaxialTmodulus);
    nylon66values.putDouble("nylon66.matrixtransTmodulus", nylon66.matrixtransTmodulus);
    nylon66values.putDouble("nylon66.matrixpoissons",nylon66.matrixpoissons);
    nylon66values.putDouble("nylon66.UTS",nylon66.matrixpoissons);
    it.putExtras(nylon66values);
    Log.d("ADebugTag", "Value: " + Double.toString(nylon66.matrixrho));
    startActivity(it);
}}

и MatrixBase

public class MatrixBase {

double matrixrho;
double matrixaxialTmodulus;
double matrixtransTmodulus;
double matrixpoissons;
double matrixUTS;

MatrixBase(double matrixrho, double matrixaxialTmodulus, double matrixtransTmodulus, double matrixpoissons, double matrixUTS) {
    this.matrixrho = matrixrho;
    this.matrixaxialTmodulus = matrixaxialTmodulus;
    this.matrixtransTmodulus = matrixtransTmodulus;
    this.matrixpoissons = matrixpoissons;
    this.matrixUTS = matrixUTS;
}}

Ответы [ 3 ]

0 голосов
/ 03 января 2019

В качестве точек демидуста есть цикл ... вы запускаете MainActivity, который запускает MaterialCollect, который запускает другую MainActivity ...

Проверка Как управлять startActivityForResult на Android? если вынеобходимо получить значение из другого вида деятельности.

0 голосов
/ 03 января 2019

Лучше использовать класс Serialize, так как вы можете передать всю модель в действие. пожалуйста, проверьте ниже обновленный код

public class MatrixBase implements Serializable {

double matrixrho;
double matrixaxialTmodulus;
double matrixtransTmodulus;
double matrixpoissons;
double matrixUTS;

MatrixBase(double matrixrho, double matrixaxialTmodulus, double matrixtransTmodulus, double matrixpoissons, double matrixUTS) {
    this.matrixrho = matrixrho;
    this.matrixaxialTmodulus = matrixaxialTmodulus;
    this.matrixtransTmodulus = matrixtransTmodulus;
    this.matrixpoissons = matrixpoissons;
    this.matrixUTS = matrixUTS;
}}

Изменить код в MaterialCollect

 Intent it = new Intent(MaterialCollect.this, MainActivity.class);
 it.putExtra("it",nylon66)
 startActivity(it);

и получите весь элемент с кодом ниже в методе MainActivity oncreate

MatrixBase matrixBase= (MatrixBase)getIntent().getSerializableExtra("it");

тогда вы можете получить доступ ко всем данным с одной модели

0 голосов
/ 03 января 2019

Из того, что вы опубликовали, я предполагаю, что вам нужно вернуть значение в MainActivity.

Ваш код MainActivity неверен (вы создаете новый Bundle и, кроме того, вы перезваниваете свою активность MaterialCollect).

Вам нужно просто получить дополнительные данные от вызываемого абонента, используя getIntent().getExtras()

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    Bundle b = getIntent().getExtras();
    rho_m = b.getDouble("nylon66.matrixrho");
    if (rho_m != null)
    {
        Log.d("print out","THE VALUE OF " + Double.toString(rho_m));
    }   
 }
...