我有一个带有导航抽屉的活动,当我运行代码时,出现以下错误...
“试图在空对象引用上调用虚拟方法'void android.support.v7.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)'”
但是此错误以前没有出现,所以我不知道这是我尝试运行的代码还是版本的问题
有人有什么建议吗?
这是我的MainActivity:
import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import br.com.tecmafandroid.projeto.tecmaf.Adapter.FeedAdapter;
import br.com.tecmafandroid.projeto.tecmaf.R;
import br.com.tecmafandroid.projeto.tecmaf.config.ConfiguracaoFirebase;
import br.com.tecmafandroid.projeto.tecmaf.helper.Base64Custom;
import br.com.tecmafandroid.projeto.tecmaf.helper.Permissao;
import br.com.tecmafandroid.projeto.tecmaf.helper.Preferencias;
import br.com.tecmafandroid.projeto.tecmaf.helper.UsuarioFirebase;
import br.com.tecmafandroid.projeto.tecmaf.model.Contato;
import br.com.tecmafandroid.projeto.tecmaf.model.Feed;
import br.com.tecmafandroid.projeto.tecmaf.model.Usuario;
import de.hdodenhof.circleimageview.CircleImageView;
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private FirebaseAuth usuarioAutenticacao;
private Toolbar toolbar;
private String identificadorContato;
private DatabaseReference firebase;
private String idUsuarioLogado;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
private FloatingActionButton floatingActionButton;
private RecyclerView recyclerFeed;
private FeedAdapter feedAdapter;
private List<Feed> listaFeed = new ArrayList<>();
private ValueEventListener valueEventListenerFeed;
private DatabaseReference feedRef;
private FirebaseUser firebaseUser;
private LinearLayout linearMessages;
private LinearLayout linearItensSalvos;
private CircleImageView circleFacebook, circleInstagram, circleLinkedin, circleTwitter;
private static final int SELECAO_CAMERA = 100;
private static final int SELECAO_GALERIA = 200;
private String[] permissoesNecessarias = new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Tecmaf");
drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open_drawer, R.string.close_drawer);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
NavigationView navigationView = (NavigationView) findViewById(R.id.navView);
navigationView.setNavigationItemSelectedListener(this);
navigationView.removeHeaderView(navigationView.getHeaderView(0));
navigationView.removeHeaderView(null);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
final View headerLayout = navigationView.inflateHeaderView(R.layout.nav_header);
final ImageView navHeaderImageView = (ImageView) headerLayout.findViewById(R.id.nav_header_imageView);
final TextView navHeaderUsuario = (TextView) headerLayout.findViewById(R.id.nav_header_usuario);
final TextView navHeaderEmail = (TextView) headerLayout.findViewById(R.id.nav_header_email);
Uri url = firebaseUser.getPhotoUrl();
if (url != null) {
Glide.with(MainActivity.this)
.load(url)
.into(navHeaderImageView);
} else {
navHeaderImageView.setImageResource(R.drawable.avatar);
}
navHeaderUsuario.setText("Olá, " + firebaseUser.getDisplayName() + "!");
navHeaderEmail.setText(firebaseUser.getEmail());
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.item_pesquisar) {
Intent intent = new Intent(MainActivity.this, PesquisarActivity.class);
startActivity(intent);
}
return super.onOptionsItemSelected(menuItem);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.manu_main, menu);
return true;
}
}
答案 0 :(得分:0)
基于adding a Toolbar as an ActionBar的官方文档,您还应该在配置工具栏后立即调用setSupportActionBar(toolbar)
。 (链接中的第5步)
只要在调用getSupportActionBar
之前执行此操作,它将返回此工具栏,而不是null
。这应该可以解决您的问题。
答案 1 :(得分:0)
调用setDisplayHomeAsUpEnabled可以产生一个NPE。像这样用空检查将其包装:
if (getSupportActionBar() != null) {
getSupportActionBar()。setDisplayHomeAsUpEnabled(true); }