使用intent和get方法时Android应用程序崩溃

时间:2017-12-20 20:42:50

标签: android android-intent android-activity

我是Android编程新手,我第一次尝试使用应用时遇到了问题。

我有两项活动。 ApplicazioneContattoActivity.java(主要的)和ModificaContattoActivity.java。

在第一个活动布局中,有三个textViews,其中包含姓名,姓氏和联系人的电话号码以及按钮。按下按钮时,应开始第二个活动。在第二个活动布局中,有三个editText应填充第一个活动的值。

值在具有intent的对象和对象之间传递。

问题是,当按下第一个活动中的按钮时,应用程序崩溃。错误发生在以下部分:

campoNome.setText(contatto.getNome());

你能帮我找出问题所在吗?

非常感谢!

第一项活动:

package com.example.applicazionecontatto;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.io.Serializable;

public class ApplicazioneContattoActivity extends AppCompatActivity {
    Contatto mioContatto;

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

        Contatto mioContatto = new Contatto("Mario", "Rossi", "123456");

        TextView nome = (TextView) this.findViewById(R.id.campoNome);
        TextView cognome = (TextView) this.findViewById(R.id.campoCognome);
        TextView numero = (TextView) this.findViewById(R.id.campoNumero);

        nome.setText(mioContatto.getNome());
        cognome.setText(mioContatto.getCognome());

        numero.setText(mioContatto.getNumeroDiTelefono());
    }

    public void modifica(View button){
        Intent intent = new Intent(this, ModificaContattoActivity.class);
        String pkg = getPackageName();
        intent.putExtra(pkg+".mioContatto", (Serializable) mioContatto);
        startActivityForResult(intent, 0);
    }

    @Override
    protected void onActivityResult(int requestCode,  int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK){
        String pkg = getPackageName();
        mioContatto = (Contatto) data.getSerializableExtra(pkg+".nuovoContatto");

        TextView nome = (TextView) this.findViewById(R.id.campoNome);
        TextView cognome = (TextView) this.findViewById(R.id.campoCognome);
        TextView numero = (TextView) this.findViewById(R.id.campoNumero);

        nome.setText(mioContatto.getNome());
        cognome.setText(mioContatto.getCognome());
        numero.setText(mioContatto.getNumeroDiTelefono());
        }
    }


}

第二项活动:

package com.example.applicazionecontatto;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;

import java.io.Serializable;


public class ModificaContattoActivity extends AppCompatActivity {

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

        setContentView(R.layout.modifica_layout);

        Intent intent = getIntent();

        String pkg = getPackageName();

        Contatto contatto = (Contatto) intent.getSerializableExtra(pkg + ".mioContatto");

        EditText campoNome = (EditText) findViewById(R.id.EditText1);
        EditText campoCognome = (EditText) findViewById(R.id.EditText2);
        EditText campoNumero = (EditText) findViewById(R.id.EditText3);

        campoNome.setText(contatto.getNome());
        campoCognome.setText(contatto.getCognome());
        campoNumero.setText(contatto.getNumeroDiTelefono());

    }


    public void conferma(View button){

        EditText campoNome = (EditText) findViewById(R.id.EditText1);
        EditText campoCognome = (EditText) findViewById(R.id.EditText2);
        EditText campoNumero = (EditText) findViewById(R.id.EditText3);

        String nome = campoNome.getText().toString();
        String cognome = campoCognome.getText().toString();
        String numero = campoNumero.getText().toString();

        Contatto nuovoContatto = new Contatto(nome, cognome, numero);

        Intent intent = new Intent();
        String pkg = getPackageName();
        intent.putExtra(pkg+".nuovoContatto", (Serializable)nuovoContatto);

        setResult(RESULT_OK, intent);
        finish();

    }
}

Class Contatto:

package com.example.applicazionecontatto;


import java.io.Serializable;

public class Contatto implements Serializable{

    private String nome;
    private String cognome;
    private String numeroDiTelefono;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public String getNumeroDiTelefono() {
        return numeroDiTelefono;
    }

    public void setNumeroDiTelefono(String numeroDiTelefono) {
        this.numeroDiTelefono = numeroDiTelefono;
    }

    public Contatto(String nome, String cognome, String numeroDiTelefono) {
        super();
        this.nome = nome;
        this.cognome = cognome;
        this.numeroDiTelefono = numeroDiTelefono;
    }

}

1 个答案:

答案 0 :(得分:0)

如果有NullPointerException,那么因为初始化mioContatto时,您正在重新声明变量而不是初始化类成员。所以,而不是做:

Contatto mioContatto = new Contatto("Mario", "Rossi", "123456");

这样做:

mioContatto = new Contatto("Mario", "Rossi", "123456");

如果您收到NullPointerException,这很可能会修复您的错误。