0
I’m developing an app delivery (with client version and Adm) in which the administrator version changes the status of orders through a spinner, after which the client app receives a status update. The problem is that when I change the status the error occurs below:
Log Cat
04-03 15:17:55.920 22138-22138/com.vsousa.burgaoadm E/UncaughtException: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vsousa.burgaoadm/com.vsousa.burgaoadm.Home}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.vsousa.burgaoadm.Model.User.getName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.vsousa.burgaoadm.Model.User.getName()' on a null object reference
at com.vsousa.burgaoadm.Home.onCreate(Home.java:121)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
Home.class
:
package com.vsousa.burgaoadm;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.rengwuxian.materialedittext.MaterialEditText;
import com.squareup.picasso.Picasso;
import com.vsousa.burgaoadm.Common.Common;
import com.vsousa.burgaoadm.Interface.ItemClickListener;
import com.vsousa.burgaoadm.Model.Category;
import com.vsousa.burgaoadm.Model.Token;
import com.vsousa.burgaoadm.ViewHolder.MenuViewHolder;
import java.util.UUID;
public class Home extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
TextView txtFullName;
FirebaseDatabase database;
DatabaseReference categories;
FirebaseStorage storage;
StorageReference storageReference;
FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter;
RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;
MaterialEditText edtName;
Button btnUpload, btnSelect;
Category newCategory;
Uri saveUri;
DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Menu Adm");
setSupportActionBar(toolbar);
//Iniciar Firebase
database = FirebaseDatabase.getInstance();
categories = database.getReference("Category");
storage = FirebaseStorage.getInstance();
storageReference = storage.getReference();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDialog();
}
});
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
//Setando nome do usuário
View headerView = navigationView.getHeaderView(0);
txtFullName = headerView.findViewById(R.id.txtFullName);
txtFullName.setText(Common.currentUser.getName());
//Iniciar Visualização
recycler_menu = findViewById(R.id.recycler_menu);
recycler_menu.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recycler_menu.setLayoutManager(layoutManager);
loadMenu();
//Enviando Token
updateToken(FirebaseInstanceId.getInstance().getToken());
}
private void updateToken(String token) {
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference tokens = db.getReference("Tokens");
Token data = new Token(token, true);
tokens.child(Common.currentUser.getPhone()).setValue(data);
}
private void showDialog() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(Home.this);
alertDialog.setTitle("Adicionar nova categoria");
alertDialog.setMessage("Preencha todas as informações!");
LayoutInflater inflater = this.getLayoutInflater();
View add_menu_layout = inflater.inflate(R.layout.add_new_menu_layout, null);
edtName = add_menu_layout.findViewById(R.id.edtName);
btnSelect = add_menu_layout.findViewById(R.id.btnSelect);
btnUpload = add_menu_layout.findViewById(R.id.btnUpload);
//Evento do Botão
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
chooseImage(); //Para selecionar imagens da galeria
}
});
btnUpload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
uploadImage();
}
});
alertDialog.setView(add_menu_layout);
alertDialog.setIcon(R.drawable.ic_playlist_add_black_24dp);
//Setando botão
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
//Aqui, apenas cria uma nova categoria
if (newCategory != null)
{
categories.push().setValue(newCategory);
Snackbar.make(drawer, "Nova categoria "+newCategory.getName()+" foi adicionada!", Snackbar.LENGTH_SHORT).show();
}
}
});
alertDialog.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
Toast.makeText(Home.this, "Processo cancelado", Toast.LENGTH_SHORT).show();
}
});
alertDialog.show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Common.PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null)
{
saveUri = data.getData();
btnSelect.setText("Imagem Carregada"); //Mostra mensagem após a imagem ser escolhida
}
}
//SELECIONAR IMAGEM
private void chooseImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Selecione imagem"), Common.PICK_IMAGE_REQUEST);
}
//CARREGANDO IMAGEM
private void uploadImage() {
if (saveUri != null)
{
final ProgressDialog mDialog = new ProgressDialog(this);
mDialog.setMessage("Carregando...");
mDialog.show();
String imageName = UUID.randomUUID().toString();
final StorageReference imageFolder = storageReference.child("images/"+imageName);
imageFolder.putFile(saveUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mDialog.dismiss();
Toast.makeText(Home.this, "Finalizado!", Toast.LENGTH_SHORT).show();
imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//Setando valores na nova categoria
newCategory = new Category(edtName.getText().toString(), uri.toString());
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
mDialog.dismiss();
Toast.makeText(Home.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
mDialog.setMessage("Carregando "+progress+"%");
}
});
}
}
private void loadMenu() {
adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(
Category.class,
R.layout.menu_item,
MenuViewHolder.class,
categories
) {
@Override
protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int position) {
viewHolder.txtMenuName.setText(model.getName());
Picasso.with(Home.this).load(model.getImage())
.into(viewHolder.imageView);
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
//Abir nova tela de acordo com a categoria
Intent foodList = new Intent(Home.this, FoodList.class);
foodList.putExtra("CategoryId", adapter.getRef(position).getKey());
startActivity(foodList);
}
});
}
};
//Atualizar dados se houver mudanças
adapter.notifyDataSetChanged();
recycler_menu.setAdapter(adapter);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_menu) {
} else if (id == R.id.nav_orders) {
Intent OrderIntent = new Intent(Home.this, OrderStatus.class);
startActivity(OrderIntent);
/* } else if (id == R.id.nav_cart) {
Intent cartIntent = new Intent(Home.this, Cart.class);
startActivity(cartIntent);
} else if (id == R.id.nav_sobre) { */
} else if (id == R.id.nav_sair) {
Intent signIn = new Intent(Home.this, SignIn.class);
signIn.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(signIn);
/* } else if (id == R.id.nav_contato) {
Intent contato = new Intent(Home.this, Contato.class);
startActivity(contato);
} else if (id == R.id.nav_endereco) {
Intent endereco = new Intent(Home.this, Endereco.class);
startActivity(endereco);
} else if (id == R.id.nav_app) {
Intent info = new Intent(Home.this, Info.class);
startActivity(info); */
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
//Setar nome default
edtName.setText(item.getName());
alertDialog.show();
}
private void changeImage(final Category item) {
if (saveUri != null)
{
final ProgressDialog mDialog = new ProgressDialog(this);
mDialog.setMessage("Carregando...");
mDialog.show();
String imageName = UUID.randomUUID().toString();
final StorageReference imageFolder = storageReference.child("images/"+imageName);
imageFolder.putFile(saveUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mDialog.dismiss();
Toast.makeText(Home.this, "Finalizado!", Toast.LENGTH_SHORT).show();
imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//Setando valores na nova categoria
item.setImage(uri.toString());
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
mDialog.dismiss();
Toast.makeText(Home.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
mDialog.setMessage("Carregando "+progress+"%");
}
});
}
}
}
Common.class
:
package com.vsousa.burgaoadm.Common;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import com.vsousa.burgaoadm.Model.Request;
import com.vsousa.burgaoadm.Model.User;
import com.vsousa.burgaoadm.Remote.APIService;
import com.vsousa.burgaoadm.Remote.FCMRetrofitClient;
import com.vsousa.burgaoadm.Remote.IGeoCoordinates;
import com.vsousa.burgaoadm.Remote.RetrofitClient;
/**
* Created by valdemir.sousa on 15/02/2018.
*/
public class Common {
public static User currentUser;
public static Request currentRequest;
public static final String UPDATE = "Alterar";
public static final String DELETE = "Remover";
public static final int PICK_IMAGE_REQUEST = 71;
public static final String baseUrl = "https://maps.googleapis.com";
public static final String fcmUrl = "https://fcm.googleapis.com/";
public static String convertCodeToStatus (String code)
{
switch (code) {
case "0":
return "Pedido recebido";
case "1":
return "Pedido em preparação";
case "2":
return "Pedido a caminho";
case "3":
return "Pedido entregue";
default:
return "Pedido recebido";
}
}
public static APIService getFCMClient(){
return FCMRetrofitClient.getClient(fcmUrl).create(APIService.class);
}
public static IGeoCoordinates getGeoCodeService(){
return RetrofitClient.getClient(baseUrl).create(IGeoCoordinates.class);
}
public static Bitmap scaleBitmap(Bitmap bitmap, int newWidth, int newHeight)
{
Bitmap scaleBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888);
float scaleX = newWidth/ (float)bitmap.getWidth();
float scaleY = newHeight/ (float)bitmap.getHeight();
float pivotX = 0, pivotY = 0;
Matrix scaleMatrix = new Matrix();
scaleMatrix.setScale(scaleX, scaleY, pivotX, pivotY);
Canvas canvas = new Canvas(scaleBitmap);
canvas.setMatrix(scaleMatrix);
canvas.drawBitmap(bitmap, 0, 0, new Paint(Paint.FILTER_BITMAP_FLAG));
return scaleBitmap;
}
}
With so much code it is unlikely that you have an answer. You should always debug the application and try to understand where the error is and why. Still I will give my help in the form of comment.
NullPointerException
is one of the most common errors in Java and Android. This means that you are using an object that is null when it should not. Analyze the line where you have the error and see which object is null. If it can be null put aif
before accessing. If it is not supposed to be null analyze why it is null seeing the code backwards– Isac
Thanks Isac, I’ll check..
– vsousa
Could you post Common class content? What type of authentication is used in the app (Google, email/password etc)?
– Lennoard Silva
Common class posted!
– vsousa