我是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;
}
}
答案 0 :(得分:0)
如果有NullPointerException
,那么因为初始化mioContatto
时,您正在重新声明变量而不是初始化类成员。所以,而不是做:
Contatto mioContatto = new Contatto("Mario", "Rossi", "123456");
这样做:
mioContatto = new Contatto("Mario", "Rossi", "123456");
如果您收到NullPointerException,这很可能会修复您的错误。