简体   繁体   中英

Can't back to previous activity

I need to help. I tried to back to previous activity, but when I click arrow button (action bar) it show errors. Can someone help me .. please!

Thank's before for your answers

This is my codes: First, I get data in KitabActivity (so this is the first activity): KitabActivity:

public class KitabActivity extends AppCompatActivity {

private List<Kitab> kitabList;
private RecyclerView recyclerView;
private KitabAdapter kitabAdapter;
private RecyclerView.LayoutManager layoutManager;
private Toolbar toolbar;
private ActionBar actionBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_kitab);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle("Kitab Hadits");
    setSupportActionBar(toolbar);
    actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    recyclerView = (RecyclerView) findViewById(R.id.rv_main_kitab);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    kitabList = new ArrayList<>();

    getDataKitab();
}

private void getDataKitab() {
    final ProgressDialog loading = ProgressDialog.show(this,"Mohon Tunggu...","Sedang mengambil data...",false,false);
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(ConfigKitab.DATA_URL_KITAB, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray jsonArray) {
            loading.dismiss();
            parseData(jsonArray);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            loading.dismiss();
            Toast.makeText(KitabActivity.this, "Gagal koneksi ke server!", Toast.LENGTH_SHORT).show();
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(jsonArrayRequest);
}

private void parseData(JSONArray jsonArray) {
    for(int i=0;i<jsonArray.length();i++){
        Kitab kitab = new Kitab();
        JSONObject jsonObject = null;
        try{
            jsonObject = jsonArray.getJSONObject(i);
            kitab.setId_kitab(jsonObject.getString(ConfigKitab.TAG_ID_KITAB));
            kitab.setNama_kitab(jsonObject.getString(ConfigKitab.TAG_NAMA_KITAB));
        }catch(JSONException e){
            e.printStackTrace();
        }
        kitabList.add(kitab);
    }
    kitabAdapter = new KitabAdapter(kitabList,this);
    recyclerView.setAdapter(kitabAdapter);
}
}

In KitabAdapter, I pass KEY_ID to BabKitabActivity: This is KitabAdapter:

public class KitabAdapter extends RecyclerView.Adapter<KitabVH> {
private Context context;
List<Kitab> kitabList;

public KitabAdapter(List<Kitab> kitabList, Context context){
    super();
    this.kitabList = kitabList;
    this.context = context;
}
@Override
public KitabVH onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_kitab,parent,false);
    return new KitabVH(view);
}

@Override
public void onBindViewHolder(KitabVH holder, int position) {
    final Kitab kitab = kitabList.get(position);
    holder.bind(kitab);
    holder.cv_kitab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(), BabKitabActivity.class);
            intent.putExtra("KEY_ID",kitab.getId_kitab());
            intent.putExtra("KEY_NAMA",kitab.getNama_kitab());
            v.getContext().startActivity(intent);
        }
    });
}

@Override
public int getItemCount() {
    return kitabList.size();
}
}

BabKitabActivity:

public class BabKitabActivity extends AppCompatActivity {

private List<BabKitab> babKitabList;
private RecyclerView recyclerView;
private BabKitabAdapter babKitabAdapter;
private RecyclerView.LayoutManager layoutManager;
private Toolbar toolbarBab;
private ActionBar actionBar;
private String id_kitab;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_bab_kitab);

    toolbarBab = (Toolbar) findViewById(R.id.toolbarBab);
    toolbarBab.setTitle(getIntent().getExtras().getString("KEY_NAMA"));
    setSupportActionBar(toolbarBab);
    actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    recyclerView = (RecyclerView) findViewById(R.id.rv_main_bab);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    babKitabList = new ArrayList<>();
    getDataBab();

}

private void getDataBab() {
    id_kitab = getIntent().getExtras().getString("KEY_ID");
    String url = ConfigBabKitab.DATA_URL_BAB+id_kitab;
    final ProgressDialog loading = ProgressDialog.show(this,"Mohon Tunggu...","Sedang mengambil data...",false,false);
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray jsonArray) {
            loading.dismiss();
            parseData(jsonArray);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            loading.dismiss();
            Toast.makeText(BabKitabActivity.this, "Gagal Koneksi ke Server!", Toast.LENGTH_SHORT).show();
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(jsonArrayRequest);
}

private void parseData(JSONArray response) {
    for(int i=0;i<response.length();i++){
        BabKitab babKitab = new BabKitab();
        JSONObject obj = null;
        try{
            obj = response.getJSONObject(i);
            babKitab.setId_bab_kitab(obj.getString(ConfigBabKitab.TAG_ID_BAB));
            babKitab.setNomor_bab(obj.getString(ConfigBabKitab.TAG_NOMOR_BAB));
            babKitab.setNama_bab(obj.getString(ConfigBabKitab.TAG_NAMA_BAB));
            babKitab.setPenjelasan(obj.getString(ConfigBabKitab.TAG_PENJELASAN));
        }catch(JSONException e){
            e.printStackTrace();
        }

        babKitabList.add(babKitab);
    }
    babKitabAdapter = new BabKitabAdapter(babKitabList,this);
    recyclerView.setAdapter(babKitabAdapter);
}
}

DetailActivity:

public class DetailActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private List<DetailHadits> detailHaditsList;
private DetailAdapter detailAdapter;
private String id_bab_kitab;
private TextView tv_penjelasan;
private String penjelasan;
private CardView cv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbarDetail);
    setSupportActionBar(toolbar);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    cv = (CardView) findViewById(R.id.cv);
    tv_penjelasan = (TextView) findViewById(R.id.tv_penjelasan);
    //cv.setVisibility(View.GONE);
    //tv_penjelasan.setVisibility(View.GONE);
    penjelasan = getIntent().getExtras().getString("KEY_PENJELASAN");

    tv_penjelasan.setText(penjelasan);


    recyclerView = (RecyclerView) findViewById(R.id.rv_main_detail);
    //recyclerView.setHasFixedSize(true);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    detailHaditsList = new ArrayList<>();

    getAyat();

}

private void getAyat() {
    id_bab_kitab = getIntent().getExtras().getString("KEY_ID");
    String url = ConfigDetail.DATA_URL_AYAT+id_bab_kitab;
    final ProgressDialog loading = ProgressDialog.show(this,"Mohon Tunggu...","Sedang mengambil data...",false,false);
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray jsonArray) {
            loading.dismiss();
            parseData(jsonArray);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            loading.dismiss();
            Toast.makeText(DetailActivity.this, "Error", Toast.LENGTH_SHORT).show();
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(jsonArrayRequest);
}

private void parseData(JSONArray jsonArray) {
    for(int i=0;i<jsonArray.length();i++){
        DetailHadits detailHadits = new DetailHadits();
        JSONObject obj = null;
        try{
            obj = jsonArray.getJSONObject(i);
            detailHadits.setUrlGambarAyat(obj.getString(ConfigDetail.TAG_GAMBAR));
            detailHadits.setTerjemahanAyat(obj.getString(ConfigDetail.TAG_TERJEMAHAN));
        }catch(JSONException e){
            e.printStackTrace();
        }
        detailHaditsList.add(detailHadits);
    }
    detailAdapter = new DetailAdapter(detailHaditsList,this);
    recyclerView.setAdapter(detailAdapter);
}
}

and this is the log cat:

FATAL EXCEPTION: main
                                                                             Process: id.hadits.pencarian.skripsi.nana.aplikasipencarianhadits, PID: 15228
                                                                                                      java.lang.RuntimeException: Unable to start activity ComponentInfo{id.hadits.pencarian.skripsi.nana.aplikasipencarianhadits/id.hadits.pencarian.skripsi.nana.aplikasipencarianhadits.Activity.BabKitabActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
                                                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
                                                                                                          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 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
                                                                                                          at id.hadits.pencarian.skripsi.nana.aplikasipencarianhadits.Activity.BabKitabActivity.onCreate(BabKitabActivity.java:46)
                                                                                                          at android.app.Activity.performCreate(Activity.java:5933)
                                                                                                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                                                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
                                                                                                          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) 

thank's in advance ;)

So, in my case BabKitabActivity can load data if there is a KEY_ID from KitabActivity (i guess). What I want is just go back to previous activity (in this case to BabKitabActivity) without getting KEY_ID again.

It work with button back in emulator or smartphone, but it doesn't work with arrow button in actionbar, what should I do?

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
  at id.hadits.pencarian.skripsi.nana.aplikasipencarianhadits.Activity.BabKitabActivity.onCreate(BabKitabActivity.java:46)
penjelasan = getIntent().getExtras().getString("KEY_PENJELASAN");

you can get the Bundle's data from getIntent().getExtras() , but you get null , so you got the NullPointerException , that make a crash in your app.

before getIntent().getExtras() check its null or not

Bundle extras = getIntent().getExtras();
if (extras != null) {
 penjelasan = extras.getString("KEY_PENJELASAN");
}

something like

if (extras != null) {
id_bab_kitab = extras.getString("KEY_ID");
}

Unable to start activity ComponentInfo{id.hadits.pencarian.skripsi.nana.aplikasipencarianhadits/id.hadits.pencarian.skripsi.nana.aplikasipencarianhadits.Activity.BabKitabActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

Issue is in your BatkitabActivity . You are getting string from intent which is null. Before getting string value, you can check if intent is null or not.

Bundle extras = getIntent().getExtras();
if (extras != null) {
  ....
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM