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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用intent和get方法时Android应用程序崩溃相关的知识,希望对你有一定的参考价值。

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

    }
}

班级联系人:

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;
    }

}

以上是关于使用intent和get方法时Android应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Android中Intent具体解释之使用Intent广播事件及Broadcast Receiver简单介绍

——Parcelable接口的使用(跨进程,Intent传输)

Android 应用的交互------Intent

Android 8.0 Notification和RemoteView简单使用

使用 android on click 方法启动 Intent 后应用程序崩溃

Android跨进程通信访问其他应用程序的Activity