2014-04-11 3 views
0

저는 Android 프로그래밍에 익숙하지 않습니다. 나는 안드로이드 애플 리케이션을 개발하고있다. DashboardGridActivity는 주요 활동입니다. 이 활동은이 앱을 실행하는 데 필요한 그리드보기를 표시해야합니다. 내 응용 프로그램에서 되는 다음 파일을32 프레임을 건너 뜁니다! 응용 프로그램이 주 스레드에서 너무 많은 작업을 수행 한 후 치명적인 예외 일 수 있습니다. 주

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> 

내가 이것을 실행하려고 에뮬레이터에서 메시지를 보냅니다. "불행히도 DashboardGridActivity에는 stopp가 있습니다. 로그 캣에서

나는 다음과 같은 메시지를 얻을 "작업 에드 :

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 

는 방법 DashboardAdapter이 문제

+1

... 및 기타 섹션 표시 LogCat - 가장 중요한 부분을 자릅니다. – panini

+0

@panini : 질문을 수정했습니다. – Akshay

답변

1

자신의 분야 context를 해결하는 방법입니다 null

당신이 있는지 확인해야 저를 제안하십시오 생성자에서 다음과 같이 지정합니다.

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); 
    } 
} 

참고 : context 필드의 이름을 mContext으로 변경 했으므로 멤버 필드임을 분명히 알았으므로 메서드 인수로 숨길 수 없습니다.