Question

I am new to android programming. I am developing an android app. DashboardGridActivity is a main activity. This activity should show grid view on launching of this app. Following are files from my app:

DashboardGridActivity:

public class DashboardGridActivity extends Activity {

GridView myDashboard;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dashboard_grid);
    myDashboard = (GridView)findViewById(R.id.dashboard);
    myDashboard.setAdapter(new DashboardAdapter(this));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.dashboard_grid, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
  }
}

class ViewHolder
{
    ImageView myItem;
    ViewHolder(View v)
    {
        myItem = (ImageView) v.findViewById(R.id.imageView1);
    }
}

class DashboardItems
{
    int imageID;
    String itemName;
    DashboardItems(int imageID, String itemName)
    {
        this. imageID=imageID;
        this.itemName= itemName;
    }
}

class DashboardAdapter extends BaseAdapter
{
    ArrayList<DashboardItems> dashboardImages;
    Context context;
    DashboardAdapter(Context context)
    {
        dashboardImages = new ArrayList<DashboardItems>();
        Resources res = context.getResources();
        String[] tempDashItems = res.getStringArray(R.array.dashboard_names);
        int[] dashImages = {R.drawable.apartments, R.drawable.atms, R.drawable.banks, R.drawable.book_stores, R.drawable.car_rentals, R.drawable.furniture_shops, R.drawable.gas_stations, R.drawable.gyms, R.drawable.malls, R.drawable.mobile_shops, R.drawable.pharmacy, R.drawable.pizza_places, R.drawable.postal_services, R.drawable.restaurants, R.drawable.subs_burgers, R.drawable.supermarkets, R.drawable.theatres};
        for(int i=0;i<10;i++)
        {
            DashboardItems tempDash = new DashboardItems(dashImages[i],tempDashItems[i]);
            dashboardImages.add(tempDash);
        }
    }
@Override
public int getCount() {
    return dashboardImages.size();
}

@Override
public Object getItem(int i) {
    return dashboardImages.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    View row= view;
    ViewHolder holder = null;
    if(row==null)
    {
        LayoutInflater inflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.single_item, viewGroup, false);
        holder=new ViewHolder(row);
        row.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) row.getTag();
    }
    DashboardItems temp = dashboardImages.get(i);
    holder.myItem.setImageResource(temp.imageID);
    return row;
  }
}

ativity_dashboard_grid.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="asm.offcampusresources.app.OffCampusResourcesActivity">


<GridView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/dashboard"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentBottom="true"
    android:numColumns="auto_fit"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:columnWidth="120dp"
    android:stretchMode="spacingWidthUniform"/>

</RelativeLayout>

single_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:contentDescription="@string/desc"/>

</RelativeLayout>

When I am trying to run this on Emulator it gives message "Unfortunately DashboardGridActivity has stopped working"

In LogCat I get following messages:

    04-10 20:53:37.901: I/Choreographer(1144): Skipped 32 frames!  The application may be doing too much work on its main thread.
04-10 20:53:38.031: D/AndroidRuntime(1144): Shutting down VM
04-10 20:53:38.031: W/dalvikvm(1144): threadid=1: thread exiting with uncaught exception (group=0xb2a2dba8)
04-10 20:53:38.291: D/dalvikvm(1144): GC_FOR_ALLOC freed 76K, 5% free 3131K/3280K, paused 108ms, total 109ms
04-10 20:53:38.301: E/AndroidRuntime(1144): FATAL EXCEPTION: main
04-10 20:53:38.301: E/AndroidRuntime(1144): Process: asm.offcampusresdemo, PID: 1144
04-10 20:53:38.301: E/AndroidRuntime(1144): java.lang.NullPointerException
04-10 20:53:38.301: E/AndroidRuntime(1144):     at asm.offcampusresdemo.DashboardAdapter.getView(DashboardGridActivity.java:118)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.widget.AbsListView.obtainView(AbsListView.java:2263)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.widget.GridView.onMeasure(GridView.java:1044)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.View.measure(View.java:16497)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.View.measure(View.java:16497)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.View.measure(View.java:16497)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.View.measure(View.java:16497)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.View.measure(View.java:16497)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.Choreographer.doFrame(Choreographer.java:544)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.os.Handler.handleCallback(Handler.java:733)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.os.Handler.dispatchMessage(Handler.java:95)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.os.Looper.loop(Looper.java:136)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at java.lang.reflect.Method.invokeNative(Native Method)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at java.lang.reflect.Method.invoke(Method.java:515)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-10 20:53:38.301: E/AndroidRuntime(1144):     at dalvik.system.NativeStart.main(Native Method)
04-10 20:53:53.171: I/Process(1144): Sending signal. PID: 1144 SIG: 9
04-10 20:54:03.361: D/AndroidRuntime(1169): Shutting down VM
04-10 20:54:03.361: W/dalvikvm(1169): threadid=1: thread exiting with uncaught exception (group=0xb2a2dba8)
04-10 20:54:03.471: D/dalvikvm(1169): GC_FOR_ALLOC freed 79K, 5% free 3131K/3284K, paused 40ms, total 43ms
04-10 20:54:03.481: E/AndroidRuntime(1169): FATAL EXCEPTION: main
04-10 20:54:03.481: E/AndroidRuntime(1169): Process: asm.offcampusresdemo, PID: 1169
04-10 20:54:03.481: E/AndroidRuntime(1169): java.lang.NullPointerException
04-10 20:54:03.481: E/AndroidRuntime(1169):     at asm.offcampusresdemo.DashboardAdapter.getView(DashboardGridActivity.java:118)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.widget.AbsListView.obtainView(AbsListView.java:2263)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.widget.GridView.onMeasure(GridView.java:1044)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.View.measure(View.java:16497)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.View.measure(View.java:16497)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.View.measure(View.java:16497)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.View.measure(View.java:16497)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.View.measure(View.java:16497)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.Choreographer.doFrame(Choreographer.java:544)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.os.Handler.handleCallback(Handler.java:733)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.os.Handler.dispatchMessage(Handler.java:95)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.os.Looper.loop(Looper.java:136)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at java.lang.reflect.Method.invokeNative(Native Method)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at java.lang.reflect.Method.invoke(Method.java:515)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-10 20:54:03.481: E/AndroidRuntime(1169):     at dalvik.system.NativeStart.main(Native Method)
04-10 20:54:06.321: I/Process(1169): Sending signal. PID: 1169 SIG: 9

Please suggest me how to resolve this problem

Was it helpful?

Solution

your field context in your DashboardAdapter is null

you should make sure you assign it in your constructor, like this:

Context mContext = null;

DashboardAdapter(Context context)
{
    mContext = context;
    dashboardImages = new ArrayList<DashboardItems>();
    Resources res = context.getResources();
    String[] tempDashItems = res.getStringArray(R.array.dashboard_names);
    int[] dashImages = {R.drawable.apartments, R.drawable.atms, R.drawable.banks, R.drawable.book_stores, R.drawable.car_rentals, R.drawable.furniture_shops, R.drawable.gas_stations, R.drawable.gyms, R.drawable.malls, R.drawable.mobile_shops, R.drawable.pharmacy, R.drawable.pizza_places, R.drawable.postal_services, R.drawable.restaurants, R.drawable.subs_burgers, R.drawable.supermarkets, R.drawable.theatres};
    for(int i=0;i<10;i++)
    {
        DashboardItems tempDash = new DashboardItems(dashImages[i],tempDashItems[i]);
        dashboardImages.add(tempDash);
    }
}

Note: I have renamed the field context to mContext so it is more obvious that it is a member field, and so it won't be hidden by the method argument

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top