Skip to main content

Crash when switching to ListView?



I have a normal LinearLayout for my main.xml , and my second activity is a ListView . I have a button on main.xml that should take me to the ListView . I get an Unexpected Error message and have to force close when I press the button.





Main.xml:







<?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"

android:weightSum="1"

android:background="@drawable/forzabg">



<ImageView

android:id="@+id/mainlogo"

android:layout_width="210dp"

android:layout_height="119dp"

android:layout_gravity="center"

android:layout_weight="0.00"

android:scaleType="fitXY"

android:src="@drawable/forzalogo" >



</ImageView>



<ImageView

android:id="@+id/menuButton1"

android:layout_width="185dp"

android:layout_height="56dp"

android:layout_gravity="center"

android:layout_weight="0.14"

android:src="@drawable/carslist" />



/>



</LinearLayout>







Java for main.xml:







package com.forza;



import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.ImageView;



public class Forza2Activity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);



ImageView carbutton = (ImageView) findViewById(R.id.menuButton1);



carbutton.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

Intent myIntent = new Intent(view.getContext(), CarList.class);

startActivity(myIntent);

}

});



}

}







carlist.xml (ListView) activity:







<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">



<ListView

android:id="@+id/mylist"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:entries="@array/Brands" >

</ListView>



</LinearLayout>







Java for ListView activity:







package com.forza;



import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.ImageView;

import android.widget.ListView;





public class CarList extends Activity {







ListView carList = (ListView) findViewById(R.id.mylist);

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.carlist);



ImageView carbutton = (ImageView) findViewById(R.id.menuButton1);



carbutton.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

Intent intent = new Intent();

setResult(RESULT_OK, intent);

finish();

};

});

}

}







LogCat:







02-26 16:35:50.158: W/dalvikvm(341): threadid=3: thread exiting with uncaught exception (group=0x4001b188)

02-26 16:35:50.158: E/AndroidRuntime(341): Uncaught handler: thread main exiting due to uncaught exception

02-26 16:35:50.168: E/AndroidRuntime(341): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.forza/com.forza.CarList}: java.lang.NullPointerException

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.ActivityThread.access$2200(ActivityThread.java:119)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.os.Handler.dispatchMessage(Handler.java:99)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.os.Looper.loop(Looper.java:123)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.ActivityThread.main(ActivityThread.java:4363)

02-26 16:35:50.168: E/AndroidRuntime(341): at java.lang.reflect.Method.invokeNative(Native Method)

02-26 16:35:50.168: E/AndroidRuntime(341): at java.lang.reflect.Method.invoke(Method.java:521)

02-26 16:35:50.168: E/AndroidRuntime(341): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)

02-26 16:35:50.168: E/AndroidRuntime(341): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

02-26 16:35:50.168: E/AndroidRuntime(341): at dalvik.system.NativeStart.main(Native Method)

02-26 16:35:50.168: E/AndroidRuntime(341): Caused by: java.lang.NullPointerException

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.Activity.findViewById(Activity.java:1612)

02-26 16:35:50.168: E/AndroidRuntime(341): at com.forza.CarList.<init>(CarList.java:15)

02-26 16:35:50.168: E/AndroidRuntime(341): at java.lang.Class.newInstanceImpl(Native Method)

02-26 16:35:50.168: E/AndroidRuntime(341): at java.lang.Class.newInstance(Class.java:1479)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)

02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)

02-26 16:35:50.168: E/AndroidRuntime(341): ... 11 more

02-26 16:35:50.178: I/dalvikvm(341): threadid=7: reacting to signal 3

02-26 16:35:50.178: E/dalvikvm(341): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

02-26 16:35:53.198: I/Process(341): Sending signal. PID: 341 SIG: 9

02-26 16:35:53.608: D/dalvikvm(348): GC freed 611 objects / 48680 bytes in 58ms

02-26 16:35:54.258: D/dalvikvm(348): GC freed 59 objects / 2336 bytes in 50ms







Is it even possible to go from a regular view to a ListView?


Comments

  1. The key line in the log is this :

    02-26 16:35:50.168: E/AndroidRuntime(341): Caused by: java.lang.NullPointerException
    02-26 16:35:50.168: E/AndroidRuntime(341): at android.app.Activity.findViewById(Activity.java:1612)


    You are getting a null pointer exception trying to find some view.

    I suspect this is your line 1612:

    ListView carList = (ListView) findViewById(R.id.mylist);


    This should be inside your onCreate() because at that point (where it is now) it wonT have been initilized yet.




    Is it even possible to go from a regular view to a ListView?


    It sure is. But in case you donT know about it already, I also suggest you should check the ListActivity which would allow easy handling of the entire list data and events on the items of your CarList.



    EDIT Missing button in the carlist.xml

    As you set your ContentView as the carlist.xml with the line

    setContentView(R.layout.carlist);


    You need to have a matching ImageView called menuButton1 in the carlist.xml, otherwise you ll get an error in the following call:

    ImageView carbutton = (ImageView) findViewById(R.id.menuButton1);


    To avoid the error, just add a new ImageView button in the carlist.xml (this time call it something else, not menuButton1)

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.