1
I’m with this error and I can’t fix it, it works every time I run the app.
Logcat:
01-15 16:09:03.380 2473-2473/com.prjctt.allan.financeiro
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.prjctt.allan.financeiro, PID: 2473
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.prjctt.allan.financeiro/com.prjctt.allan.financeiro.ListDespesasActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method
android.view.View android.view.Window.findViewById(int) on a null
object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method android.view.View
android.view.Window.findViewById(int) on a null object reference
at android.app.Activity.findViewById(Activity.java:2071)
at com.prjctt.allan.financeiro.ListDespesasActivity.<init>(ListDespesasActivity.java:20)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1572)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Class where the error occurs:
public class ListDespesasActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
DespesaDAO despesa = new DespesaDAO(this);
List<Despesa> list = despesa.getLista();
setListAdapter(new DespesaAdapter(this,list));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_list_despesas, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.action_add_despesa:
Intent intent = new Intent(this, EditaDespesaActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
Class DespesaDAO
:
public class DespesaDAO extends SQLiteOpenHelper {
private static final String NOME_BD = "mobfin";
private static final String TABELA = "Despesa";
private static final String[] COLUNAS = {"_id", "valor", "data", "descricao", "pago", "idgrupo", "idsubgrupo", "idusuario", "incluidoem", "sincronizado"};
private static final int VERSION = 1;
public DespesaDAO(Context context) {
super(context, TABELA, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABELA + "( _id INTEGER PRIMARY KEY AUTOINCREMENT," +
" valor DOUBLE NOT NULL," +
"data DATETIME NOT NULL," +
" descricao TEXT NOT NULL," +
" pago SMALLINT NOT NULL," +
" idgrupo INT," +
" idsubgrupo INT," +
" idusuario INT," +
" incluidoem DATETIME NOT NULL," +
" sincronizado SMALLINT NOT NULL);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DespesaDAO.TABELA);
this.onCreate(db);
}
public void inserir(Despesa despesa) {
ContentValues valores = new ContentValues();
valores.put("valor", despesa.getValor());
valores.put("data", despesa.getData().toString());
valores.put("descricao", despesa.getDescricao());
valores.put("pago", despesa.isPago());
valores.put("idgrupo", despesa.getIdGrupo());
valores.put("idsubgrupo", despesa.getIdSubgrupo());
valores.put("incluidoem", despesa.getIncluidoEm().toString());
valores.put("sincronizado", despesa.isSincronizado());
getWritableDatabase().insert(TABELA, null, valores);
}
public void atualizar(Despesa despesa) {
ContentValues valores = new ContentValues();
valores.put("valor", despesa.getValor());
valores.put("data", despesa.getData());
valores.put("descricao", despesa.getDescricao());
valores.put("pago", despesa.isPago());
valores.put("idgrupo", despesa.getIdGrupo());
valores.put("idsubgrupo", despesa.getIdSubgrupo());
valores.put("idusuario", despesa.getIdUsuario());
valores.put("sincronizado", despesa.isSincronizado());
this.getWritableDatabase().update("despesa", valores, "_id = ?", new String[]{"" + despesa.getId()});
}
public void deletar (Despesa despesa){
this.getWritableDatabase().delete("despesa", "_id = " + despesa.getId(), null);
}
public List<Despesa> getLista() {
Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
List<Despesa> lista = new ArrayList<>();
while (c.moveToNext()) {
Despesa despesa = new Despesa();
despesa.setId(c.getInt(0));
despesa.setValor(c.getString(1));
//despesa.setData(2);
despesa.setDescricao(c.getString(3));
despesa.setPago(c.getString(4).equalsIgnoreCase("TRUE"));
despesa.setIdGrupo(c.getInt(5));
despesa.setIdSubgrupo(c.getInt(6));
// despesa.setIncluidoEm(c.getString(7));
despesa.setSincronizado(c.getString(8).equalsIgnoreCase("TRUE"));
lista.add(despesa);
}
c.close();
return lista;
}
}
Adapter
public class DespesaAdapter extends BaseAdapter {
private Context context;
private List<Despesa> lista;
ListView listView;
public DespesaAdapter(Context context, List<Despesa> lista) {
this.context = context;
this.lista = lista;
}
@Override
public int getCount() {
return lista.size();
}
@Override
public Object getItem(int position) {
return lista.get(position);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
final int auxPosition = position;
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final LinearLayout layout = (LinearLayout)
inflater.inflate(R.layout.despesas, null);
TextView tvNome = (TextView)
layout.findViewById(R.id.tvDesp);
tvNome.setText(lista.get(position).getDescricao());
TextView tvValor = (TextView)
layout.findViewById(R.id.tvVal);
tvValor.setText(lista.get(position).getValor());
ImageButton btEditar = (ImageButton)
layout.findViewById(R.id.btEdit);
btEditar.setOnClickListener(new ImageButton.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, EditaDespesaActivity.class);
intent.putExtra("valor", lista.get(auxPosition).getValor());
intent.putExtra("data", lista.get(auxPosition).getData());
intent.putExtra("descricao", lista.get(auxPosition).getDescricao());
context.startActivity(intent);
}
});
ImageButton btDelete = (ImageButton)
layout.findViewById(R.id.btDelete);
btDelete.setOnClickListener(new ImageButton.OnClickListener() {
@Override
public void onClick(View view) {
DespesaDAO despesa = new DespesaDAO(context);
despesa.deletar(lista.get(auxPosition));
layout.setVisibility(View.GONE);
}
});
return layout;
}
}
Allan, you’re calling the method
findViewById
at a time when theView
of thatActivity
has not yet been inflated and populated. Could indicate the classDespesaDAO
?– Wakim
Edited with the class Dismissed @Wakim
– Allan Chrystian
Could you identify line 20 of
ListDespesasActivity
? I thought it was the methoddespesa.getLista
, but it is not. At first you need to call the methodsetContentView
after thesuper.onCreate
and before anything else that manipulates theViews
.– Wakim
the line 20 would be this @Wakim : super.onCreate(savedInstanceState); .
– Allan Chrystian
Strange, there he quotes that the builder of his
Activity
, but in question I don’t see it. But also I don’t see how you arrow the layout ofActivity
.– Wakim
On the line setListAdapter(new Despesaadapter(this,list)); @Wakim. I’ll insert the Adapter for you to take a look at.
– Allan Chrystian
I said about the builder of
Activity
, not ofAdapter
(com.prjctt.allan.financeiro.ListDespesasActivity.<init>
). That’s theActivity
, updated, which gave error?– Wakim
The error stopped happening, I appreciate all the answers, I do not know what happened, today I turned on the laptop, I went to test and the error did not happen.
– Allan Chrystian