-1

您好,我正在开发可以拍摄所有照片并对其进行评分的应用程序,现在我的 CustomView 有问题(不知道如何很好地使用自定义视图),这就是我想要做的: 一只忙碌的猫

现在这是我在调用自定义视图函数之后喜欢的代码:

MainActivity.java:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);
    layout = new Layout();
    new Events(layout);
}
Layout layout;
public class Layout{
    public Layout()
    {
        btnStartMeinu = (Button)findViewById(R.id.btnStartMeinu);
    }
    Button btnStartMeinu;
}
public class Events{
    public Events(Layout layout){
        layout.btnStartMeinu.setOnClickListener(new btnStart_OnClick());

    }
    class btnStart_OnClick implements OnClickListener {

        @Override
        public void onClick(View view) {
            btn_OnClick(view);

        }
    }
}
void btn_OnClick(View view){
    Intent intent = new Intent(this, MainMenuActivity.class);
            startActivity(intent);
}
}

MainMenuActivity.java: addCostumView(); - 调用自定义视图

public class MainMenuActivity extends Activity {
Layout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maine_menu);
    layout = new Layout();
    new Events(layout);
       addCostumView();
}
public class Layout{
    public Layout(){
        linearLayout = (LinearLayout)findViewById(R.id.linearlayout1);
    }
    LinearLayout linearLayout;     
}
public class Events{
    public Events(Layout layout){

    }
}
public void addCostumView(){
    // LinearLayout layout = new LinearLayout(this);
    for(int i = 1; i<10 ; i++)
    {
        CustomView custom = new CustomView(null, null);
        // changes to yours custom view
        layout.linearLayout.addView(custom);
    }
}
}

自定义视图.java:

public class CustomView extends LinearLayout{
public CustomView(Context context, AttributeSet attrs)
{
    super(context, attrs);
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.costum_view_photos, this);
    Button btn1 = (Button)findViewById(R.id.btn1);


}

}

日志猫:

10-12 13:13:53.531      277-490/system_process I/ActivityManager: START u0 {cmp=com.example.photosnetwork/.MainMenuActivity} from pid 838
10-12 13:13:53.541      277-490/system_process W/WindowManager: Failure taking screenshot for (246x410) to layer 21015
10-12 13:13:53.751      838-838/com.example.photosnetwork D/dalvikvm: GC_FOR_ALLOC freed 52K, 7% free 2658K/2832K, paused 28ms, total 38ms
10-12 13:13:53.761      838-838/com.example.photosnetwork I/dalvikvm-heap: Grow heap (frag case) to 3.318MB for 635812-byte allocation
10-12 13:13:53.861      838-847/com.example.photosnetwork D/dalvikvm: GC_FOR_ALLOC freed 6K, 6% free 3273K/3456K, paused 101ms, total 101ms
10-12 13:13:53.992      838-840/com.example.photosnetwork D/dalvikvm: GC_CONCURRENT freed <1K, 6% free 3278K/3456K, paused 3ms+89ms, total 131ms
10-12 13:13:54.001      838-838/com.example.photosnetwork D/AndroidRuntime: Shutting down VM
10-12 13:13:54.001      838-838/com.example.photosnetwork W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40a71930)
10-12 13:13:54.031      838-838/com.example.photosnetwork E/AndroidRuntime: FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.photosnetwork/com.example.photosnetwork.MainMenuActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
        at android.app.ActivityThread.access$600(ActivityThread.java:141)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5041)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.NullPointerException
        at android.view.ViewConfiguration.get(ViewConfiguration.java:318)
        at android.view.View.<init>(View.java:3236)
        at android.view.View.<init>(View.java:3281)
        at android.view.ViewGroup.<init>(ViewGroup.java:431)
        at android.widget.LinearLayout.<init>(LinearLayout.java:176)
        at android.widget.LinearLayout.<init>(LinearLayout.java:172)
        at com.example.photosnetwork.CustomView.<init>(CustomView.java:13)
        at com.example.photosnetwork.MainMenuActivity.addCostumView(MainMenuActivity.java:37)
        at com.example.photosnetwork.MainMenuActivity.onCreate(MainMenuActivity.java:20)
        at android.app.Activity.performCreate(Activity.java:5104)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
        ... 11 more
10-12 13:13:54.051      277-378/system_process D/SystemClock: Setting time of day to sec=1381583644
10-12 13:14:04.222      277-378/system_process W/SystemClock: Unable to set rtc to 1381583644: Invalid argument
10-12 13:14:04.367      277-289/system_process W/ActivityManager: Force finishing activity com.example.photosnetwork/.MainMenuActivity
10-12 13:14:04.367      277-289/system_process W/ActivityManager: Force finishing activity com.example.photosnetwork/.MainActivity
10-12 13:14:04.507      277-294/system_process D/dalvikvm: GC_FOR_ALLOC freed 287K, 19% free 6323K/7720K, paused 59ms, total 64ms
10-12 13:14:04.507      277-294/system_process I/dalvikvm-heap: Grow heap (frag case) to 6.902MB for 635812-byte allocation
10-12 13:14:04.587      277-855/system_process D/dalvikvm: GC_FOR_ALLOC freed 12K, 17% free 6931K/8344K, paused 69ms, total 69ms
10-12 13:14:04.867        37-85/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
10-12 13:14:04.877      277-291/system_process W/ActivityManager: Activity pause timeout for ActivityRecord{410d9980 u0 com.example.photosnetwork/.MainMenuActivity}
10-12 13:14:05.367      594-609/com.android.deskclock V/AlarmClock: No next alarm
10-12 13:14:05.377      594-609/com.android.deskclock V/AlarmClock: AlarmInitReceiver finished
10-12 13:14:05.507      594-594/com.android.deskclock I/Choreographer: Skipped 112 frames!  The application may be doing too much work on its main thread.
10-12 13:14:05.587       37-312/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
10-12 13:14:10.897      619-637/com.android.exchange D/ExchangeService: Received deviceId from Email app: null
10-12 13:14:10.897      619-637/com.android.exchange D/ExchangeService: !!! deviceId unknown; stopping self and retrying
10-12 13:14:11.218      277-277/system_process I/AudioService: AudioFocus  abandonAudioFocus() from android.media.AudioManager@40ce9818com.android.music.MediaPlaybackService$3@40ce8438
10-12 13:14:15.829      277-291/system_process W/ActivityManager: Activity destroy timeout for ActivityRecord{41042a30 u0 com.example.photosnetwork/.MainActivity}
10-12 13:14:15.829      277-291/system_process W/ActivityManager: Activity destroy timeout for ActivityRecord{410d9980 u0 com.example.photosnetwork/.MainMenuActivity}
10-12 13:14:15.926      619-619/com.android.exchange D/ExchangeService: !!! EAS ExchangeService, onStartCommand, startingUp = false, running = false
10-12 13:14:15.936      277-414/system_process W/ActivityManager: Unable to start service Intent { act=com.android.email.ACCOUNT_INTENT } U=0: not found
10-12 13:14:15.936      619-636/com.android.exchange D/ExchangeService: !!! Email application not found; stopping self
10-12 13:14:15.946      277-288/system_process W/ActivityManager: Unable to start service Intent { act=com.android.email.ACCOUNT_INTENT } U=0: not found
10-12 13:14:15.967      619-619/com.android.exchange E/ActivityThread: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d04ec8 that was originally bound here
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d04ec8 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
        at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
10-12 13:14:15.976      619-619/com.android.exchange E/StrictMode: null
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d04ec8 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
        at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
10-12 13:14:15.976      277-277/system_process W/ActivityManager: Unbind failed: could not find connection for android.os.BinderProxy@4103efd8
10-12 13:14:15.987      619-619/com.android.exchange E/ActivityThread: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d04b20 that was originally bound here
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d04b20 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
10-12 13:14:15.996      619-619/com.android.exchange E/StrictMode: null
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d04b20 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
10-12 13:14:15.996      277-288/system_process W/ActivityManager: Unbind failed: could not find connection for android.os.BinderProxy@41073ad8
4

1 回答 1

0

当您从从 costum_view_photos 布局膨胀的视图中访问 btn1 时,您在 CustomView 类中得到 NullPointerException

试试这样: -

public class CustomView extends LinearLayout{
public CustomView(Context context, AttributeSet attrs)
{
    super(context, attrs);
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view= inflater.inflate(R.layout.costum_view_photos, this);
    Button btn1 = (Button) view.findViewById(R.id.btn1);//changed here

}
}

希望这可以帮助.....

于 2013-10-12T13:27:08.040 回答