Why is my variable null? - android

I have the following code:
public class Level extends Activity{
public static String TAG="Level";
Level_Score_bar score_bar;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.level_layout);
score_bar=(Level_Score_bar) findViewById(R.id.Score_Bar);
Log.d(TAG,"score_bar="+score_bar);
}
}
The XML code looks like this (R.layout.level_layout) (Non-important stuff removed)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical">
<pearsonartphoto.AJEG.Level_Score_bar android:id="#+id/Score_Bar" android:layout_height="wrap_content" android:layout_width="fill_parent">
</pearsonartphoto.AJEG.Level_Score_bar>
</LinearLayout>
The log statement reads "score_bar=null".As you can see, there is a resource named R.id.Score_Bar. Am I missing something? I need to use the function for some other stuff. Thanks!

There are a number of things that can cause this. The most common being that for one reason or another R.id was not generated correctly. Usually doing a simple 'clean' will fix this. If that doesn't work another thing to check would be the constructor for the custom view. You can find this and other suggestions from this question.

Related

type variable T with upper bounds LineChart,View

I have the following class:
public class LineChart extends AppCompatActivity{
private LineChart mChart;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_line_chart);
mChart = findViewById(R.id.linechart);
}
}
And an XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="#+id/relativeLayout">
<com.github.mikephil.charting.charts.LineChart
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/linechart">
</com.github.mikephil.charting.charts.LineChart>
My problem now is that when i try to get the Line Chart with findViewById(R.id.linechart) i get the error:
Error:(42, 24) error: incompatible types: no unique maximal instance exists for type variable T with upper bounds LineChart,View
where T is a type-variable:
T extends View declared in method findViewById(int)
If you look in the MPAndroidChart Wiki you will see that i did nothing wrong (i hope). Can someone tell me please where my mistake is. Thanks in advance
You should give your Activity a different name.
You have a conflict with the name LineChart so when you do the findViewById(...) lookup it thinks you want to use your LineChart instead of the one from the library you are using.
This is what is causing the incompatible types message since your LineChart does not extend View.

Android find resource by id during the runtime

If I get the error "android.content.res.Resources$NotFoundException: Resource ID #0x7f050007 type #0x12 is not valid" can I find some what this resource is if I know its ID?
ListView list = (ListView)findViewById(R.id.messages_list_view);
list.setAdapter(new ArrayAdapter<String>(context,
R.layout.messages_list, headers));
messages_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="#+id/messages_list_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView android:id="#+id/messages_list_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
I Got this error when using ListView in a Fragment.
Resolved by moving the setAdapter lines to the onViewCreated function of the Fragment. (makes sense that before the view is created the ListView is invalid).
so you get :
public void onViewCreated(View view,Bundle savedInstanceState){
ListView list = (ListView) getView().findViewById(R.id.thelist);
list.setAdapter(mAdapter);
}
For those whom other mentioned solutions don't work.
I did this silly mistake:-
setContentView(R.id.something);
Instead of
setContentView(R.layout.something);
Corrected that, and error was gone :D
You can either use the search function in eclipse, search for "0x7f050007" or go to projectfolder/gen/path/R.java that contains your resources.
You'll find something like this:
public static final int lineItem=0x7f07001c;
Then search for(in this example) lineItem with Eclipses search function. It'll take you to your resource in code.
Check your imports (at the top of your class-file). Maybe you imported
android.R
(which provides access to the platform-resources) instead of
{your_package_name}.R
(you can also leave it blank).

Android setImageResource NullPointerException

I have the following code:
public class PainLogger extends Activity implements OnClickListener, OnItemClickListener{
ImageView image;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView)findViewById(R.id.imageView1);
image.setImageResource(R.drawable.acetaminophen); //**Null Pointer Here**
....
}
}
Here is the image in the items.xml file. (I think this is why it is null-- instead of being in the main.xml file, the imageView is in my items.xml file, although it does show up in R.id, and R.drawable)
<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content"
android:src="#drawable/icon" android:id="#+id/imageView1"></ImageView>
You do indeed get a NullPointerException because that widget does not exist in your main.xml file. R.* lists every single ressource in your application, so that's why you see R.id.imageView1 in it.
You should either copy the contents of your items.xml file in your main.xml, or use < include /> to include items.xml or main.xml, or just change your code logic.
If you are trying to access items in a list, you should be using a ListView in main.xml, and use an adapter. You'll find a nice tutorial about this here : http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/

Custom ListView layout crashes my activity

I am starting out on Android and trying to make a custom ListView layout. I've followed some guides and have made the following code:
public class CheckInList extends ListActivity {
...
#Override
public void onCreate(Bundle savedInstanceState) {
...
mAdapter = new ArrayAdapter<String>(this, R.layout.checkinlist_item, R.id.checkinlist_item_text, mNames);
setListAdapter(mAdapter);
...
}
}
This is the code for checkinlist_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#drawable/checkinlist_item_bg">
<TextView android:id="#+id/checkinlist_item_text"
style="#style/RegisterText" />
</RelativeView>
If I use android.R.layout.simple_list_item_1 instead of my above template then everything is fine and my ListView works, however whenever I use the above code my activity crashes. I am running things on Android 1.5.
Any ideas why things are crashing?
Could it be because RelativeView does not exist?
I might suggest adding the attributes android:layout_width="fill_parent" and android:layout_height="fill_parent" or set them to whatever you want, but those are required. And yes, use RelativeLayout as Matthew said, since RelativeView doesn't exist.
at first sight there is no width/height values for your textView ?

textView.setText(); crashes

The setText() method returns null in my application why?
public class GetValue extends Activity {
char letter = 'g';
int ascii = letter;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView textView = (TextView)findViewById(R.id.txt_1);
textView.setText(ascii);
}
}
It doesn't matter what text i put in, it crashes anyway. Why does setText() keep returning null?
Thank you, in advance
Solution: My error was in the xml file. I wrote:
android:text="#+id/txt_1"
When it should say:
android:id="#+id/txt_1"
Thanks a lot for all the answers and comments!
You tried to pass an integer as parameter to setText, which assumes it is a resource ID. To display computed text, pass it as a string: textView.setText("g");
Edited: Check your XML file, I have test with something very basic and it works
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="#+id/txt_1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="myTextView"/>
</LinearLayout>
Maybe try to clean your project (Project->Clean in Eclipse), I recently have some trouble with R generation on the last ADT version.
Try this:
textView.setText(Integer.toString(ascii));
Also make sure that your layout xml has TextView txt_1
I've tried :
Integer.toString(char) and String.valueOf(char)
both didnt work.
The only solution is :
txt.setText(""+char);
This is not very efficient from optimization point of view but it does the trick :)

Categories

Resources