Getting NullPointerException while displaying ListView - android

I was trying to make a ListView of reminder notes. But when I try to save it and display it in a ListView, app crashes with this error/exception. saveNote method is called when you press save button. Any help is appreciated.
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch(id) {
case R.id.add_reminder : {
et = (EditText)findViewById(R.id.new_note);
et.setVisibility(View.VISIBLE);
note = et.getText().toString();
i++;
Button save_button = (Button) findViewById(R.id.button_save);
save_button.setVisibility(View.VISIBLE);
}
default : return super.onOptionsItemSelected(item);
}
}
public void saveNote(View view) {
String[] notes = new String[20];
notes[i] = note;
listView = (ListView) findViewById(R.id.list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1,notes);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Clicked item index
int itemPosition = position;
//Clicked item value
String itemNote = (String) listView.getItemAtPosition(position);
//Alert
Toast.makeText(getApplicationContext(), "Position :" + itemPosition + " ListItem : " + itemNote, Toast.LENGTH_LONG).show();
}
});
Logcat
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4020)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at com.cokosofts.pramith.reminder.MainActivity.saveNote(MainActivity.java:69)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

The main cause which I found from the Logs is ListView is null. Please check one more time if the listView is empty or not? Also what is notes[i] = note ??
I think in each Save button click you are finding ListView and the setting Adapter each time. This is not a good approach from my point of view. You should set the adapter very first time and next time just update your adapter data and call notifyDataSetChanged();

Debug and find out why your ListView was not found on your layout (was null).

Problem is with following line:
listView = (ListView) findViewById(R.id.list);
Please check whether your xml has ListView widget with id as 'list' .
If id is different in XML it will result in a NULL object reference. When you call
listView.setAdapter(adapter)
It will give a NULL pointer exception.

Related

android - getActionBar() return null

i have a problem with getActionBar(), this problem happens when i'm trying to change view of action bar , i'm getting this error:
java.lang.RuntimeException: Unable to start activity ComponentInfo{h.ui01/h.ui01.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setNavigationMode(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3119)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
at android.app.ActivityThread.access$1000(ActivityThread.java:198)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setNavigationMode(int)' on a null object reference
at h.ui01.MainActivity.onCreate(MainActivity.java:28)
at android.app.Activity.performCreate(Activity.java:6500)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
            at android.app.ActivityThread.access$1000(ActivityThread.java:198)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:6837)
            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:1404)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
My code is here :
public class MainActivity extends Activity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.action_bar, null);
actionBar.setCustomView(view, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
}
}
even when i try to hide action bar or change color of the action bar , i saw similar error.

Try to add values to List<Integer>

when I tried to add some values to my List inside my onResume() method i got this error:
java.lang.RuntimeException: Unable to resume activity {.../...MainActivity}: java.lang.UnsupportedOperationException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3096)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3127)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2482)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5415)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
Caused by: java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:404)
at java.util.AbstractList.add(AbstractList.java:425)
at de.toeducate.tograde.MainActivity.onResume(MainActivity.java:151)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258)
at android.app.Activity.performResume(Activity.java:6237) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3085)
            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3127)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2482)
            at android.app.ActivityThread.-wrap11(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5415)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
and here is the code I wrote:
List<Integer> marks = Collections.emptyList();
for (int i = 0; i < dataBase.getDataMark().size(); i++) {
marks.add(dataBase.getDataMark().get(i).getValue());
}
What does this mean?
Collections.emptyList(); returns a List that you cannot add to (hence the UnsupportedOperationException).
Use
List<Integer> marks = new ArrayList<Integer>();
instead.
Collections.emptyList() returns an instance of AbstractList. This is meant by the line
Caused by: java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:404)
in your exception's stack trace. This said you cannot call add on your marks list as add is not implemented.
Instead instantiate marks with a class that allows for adding elements, such as ArrayList:
List<Integer> marks = new ArrayList<Integer>();
Besides ArrayList, LinkedList is another implementation of AbstractList that supports adding elements. Most typically programmers use an ArrayList.

How to start new activity using startActivity(intent) in Custom RecyclerView Adapter?

I am having a CustomRecyclerViewAdapter.class file in which I have implemented the below method.
public void onBindViewHolder(RecyclerViewHolder viewHolder, int position)
{
viewHolder.title.setText(mData.get(position).text);
//viewHolder.icon.setBackgroundColor(Color.parseColor(mData.get(position).color));
viewHolder.setClickListener(new RecyclerViewHolder.ClickListener(){
#Override
public void onClick(View v, int position, boolean isLongClick) {
if (isLongClick) {
// View v at position pos is long-clicked.
Toast.makeText(v.getContext(), "Hey you just hit item" + position, Toast.LENGTH_SHORT).show();
}else {
// View v at position pos is clicked.
//how to start a new activity here
Toast.makeText(v.getContext(),"Hey you just hit item" + position,Toast.LENGTH_SHORT).show();
}
}
});
}
So how i can start the new activity in the else block above.
Group.class
public class Group extends ActionBarActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//line no. 16 which is indicated in logcat
setContentView(R.layout.group);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
This is my error logcat.....
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.trueblueoperator.samplerecyclerview/com.trueblueoperator.samplerecyclerview.Group}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
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.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:151)
at android.support.v7.app.ActionBarActivityDelegateBase.onCreate(ActionBarActivityDelegateBase.java:138)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123)
at com.trueblueoperator.samplerecyclerview.Group.onCreate(Group.java:16)
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)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Thanks for your time.
You can use any View to it.
getContext() method provides almost activity methods because Activity extends Context.
v.getContext().startActivity(intent);

Android: java.lang.IllegalStateException when executing Toast.makeText

I'm getting an Exception when I'm executing this code:
public void onClick(View view){
(...)
CharSequence text1 = "Please insert a number.";
int id= view.getId();
(...)
else if(id== R.id.buttonOK){
if(editText.getText().toString().matches(""))
{
Toast.makeText(view.getContext(), text1, Toast.LENGTH_SHORT).show();
}
The exception is when Toast.makeText is executed. I've already tried as 1st argument:
getApplicationContext()
this
MyActivity.this
view.getContext()
and I always get this error. Can you please help me?
Exception:
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4007)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4002)
            at android.view.View.performClick(View.java:4756)
            at android.view.View$PerformClick.run(View.java:19749)
            at android.os.Handler.handleCallback(Handler.java:739)
You can use the instance of Activity, for example:
MainActivity.this
In your case:
Toast.makeText(MainActivity.this, text1, Toast.LENGTH_SHORT).show();
If the error is in the code that you had given is then :
//make sure that you had declared and defined editext properly
else if(id== R.id.buttonOK){
if(editText.getText().toString().equals(""))
{
Toast.makeText(view.getContext(), "String", Toast.LENGTH_SHORT).show();
}

What's the difference between these two Chronometer implementations?

I've been playing around with Android Studio and I'm trying to implement a simple chronometer with the Chronometer widget. First I tried this code:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Chronometer;
import android.view.View;
public class MainActivity extends AppCompatActivity {
Chronometer chrono;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
chrono = (Chronometer) findViewById(R.id.chronometer);
setContentView(R.layout.activity_main);
}
public void startChrono(View view) {
chrono.start();
}
public void stopChrono(View view) {
chrono.stop();
}
}
But when I used it, whenever I pressed the Start button, it would crash the app. Then I found this implementation online:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Chronometer;
import android.view.View;
public class MainActivity extends AppCompatActivity {
Chronometer chrono;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void startChrono(View view) {
((Chronometer) findViewById(R.id.chronometer)).start();
}
public void stopChrono(View view) {
((Chronometer) findViewById(R.id.chronometer)).start();
}
}
This one works though, can anyone point out the differences between creating the Chronometer object in onCreate as opposed to what the second block of code does?
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4020)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Chronometer.start()' on a null object reference
at com.example.mykongee.testchronometer.MainActivity.startChrono(MainActivity.java:22)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4015)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Your issue is here:
chrono = (Chronometer) findViewById(R.id.chronometer);
setContentView(R.layout.activity_main);
You can not call findViewById before you call setContentLayout, because there is no view to find.
You app would have crashed with a NullPointerException because chrono was null.
In your first example, try swapping these two lines, and it will work the same as the second
setContentView(R.layout.activity_main);
chrono = (Chronometer) findViewById(R.id.chronometer);
In the future, do not simply say it didnt work, Android provides an amazong LogCat that tells you pretty much EXACTLY what the problem is.
If you can not decode the error yourself, then post the stacktrace provided by logcat.
In the first one you are first trying to get a reference to chrono, then you are setting your layout. The thing is, you can't get a reference without setting the layout first (can't find what isn't there...)
false:
chrono = (Chronometer) findViewById(R.id.chronometer);
setContentView(R.layout.activity_main);
correct:
setContentView(R.layout.activity_main);
chrono = (Chronometer) findViewById(R.id.chronometer);
In the second example you are setting the layout, then on button press you find the reference, so everything is ok.

Categories

Resources