简体   繁体   English

呈现genericlistrenderer时出现空指针异常

[英]Null Pointer Exception on rendering genericlistrenderer

***Iam trying to show a list populated with image and text,when iam rendering res file from UI builder iam getting null pointer exception. ***当我从UI生成器iam渲染res文件得到空指针异常时,我试图显示一个填充有图像和文本的列表。 Following is the code : 以下是代码:
@Override @Override

protected void beforeMain(Form f) { 受保护的void beforeMain(Form f){

super.beforeMain(f);
   final List list = findList(f);
   Component selected = createContainer(fetchResourceFile(), "Renderer");
   Component unselected = createContainer(fetchResourceFile(), "Renderer");
   System.out.println(selected.getName());
   list.setRenderer(new GenericListCellRenderer(selected, unselected) {
      public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
         if ((index + 1) >= list.size()) {
            fetchMore(list);
         }
         return super.getListCellRendererComponent(list, value, index, isSelected);
      }

        private void fetchMore(final List list) {
            // TODO Auto-generated method stub


            // TODO Auto-generated method stub
            NetworkManager networkManager = NetworkManager.getInstance();
            networkManager.start();
            networkManager.addErrorListener(new ActionListener() {
             public void actionPerformed(ActionEvent evt) {
             NetworkEvent n = (NetworkEvent) evt;
                n.getError().printStackTrace();                        
             }});   

            ConnectionRequest request = new ConnectionRequest() {

                String array[] ;
                String images[];
                //StringBuffer sb = new StringBuffer();  
                Hashtable h;
                Vector tweets;
               // @Override
                protected void postResponse() {

                    //cmp.setModel(new com.codename1.ui.list.DefaultListModel(array));


                }
                protected void readResponse(InputStream input) throws IOException {


                    Result result = Result.fromContent(input, Result.XML);


                     array = result.getAsStringArray("/music[1]//thumb_url");

                     int count = list.size();

                     for (int i = 0; i < array.length; i++) {
                           // Hashtable tweet = (Hashtable)tweets.elementAt(i);
                            list.addItem(array[i]);
                            addAvatar(list, array[i], count + i);
                         }
                    System.out.println(""+array.length);


                }  
                private void addAvatar(List list, String array, int i) {
                    // TODO Auto-generated method stub


                    //String url = (String)array.get("profile_image_url");
                    //String user = (String)array.get("from_user");
                   // if (array == null || array.startsWith("http:") == false) {
                       // ImageDownloadService doesn't support HTTPS at moment
                     //  return;
                    //}
                    ImageDownloadService ids = new ImageDownloadService(array, list, i, "avatar");
                    ids.setDuplicateSupported(true);
                    NetworkManager.getInstance().addToQueue(ids);
                    ImageDownloadService.createImageToStorage(array, list, i, "avatar", "-avatar",
                         new Dimension(48, 48));



                }

                protected void handleException(Exception err) {
                     //An error occured - show a message:
           Dialog.show("Alert", "Are you connected to the internet? Check your connection", "Ok", null);
               }
            };
            request.setUrl("http://api.androidhive.info/music/music.xml");    //servlet calling
            request.setPost(false);
            //infiniteProgress prog=
            InfiniteProgress prog=new InfiniteProgress();
            Dialog dlg=prog.showInifiniteBlocking();
            request.setDisposeOnCompletion(dlg);
            networkManager.addToQueueAndWait(request);
                        }


   });    }

Following is the Exception throughed java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.codename1.impl.javase.Executor$1.run(Executor.java:95) at com.codename1.ui.Display.processSerialCalls(Display.java:1075) at com.codename1.ui.Display.mainEDTLoop(Display.java:897) at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) Caused by: java.lang.NullPointerException at userclasses.StateMachine.beforeMain(StateMachine.java:117) at generated.StateMachineBase.beforeShow(StateMachineBase.java:218) at com.codename1.ui.util.UIBuilder.showForm(UIBuilder.java:2436) at com.codename1.ui.util.UIBuilder.showForm(UIBuilder.java:2483) at generated.StateMachineBase.startApp(StateMachi 以下是通过java.lang.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处的java.lang.reflect.InvocationTargetException引发的异常.lang.reflect.Method.invoke(未知源)(com.codename1.impl.javase.Executor $ 1.run(Executor.java:95)at com.codename1.ui.Display.processSerialCalls(Display.java:1075)at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)的com.codename1.ui.Display.mainEDTLoop(Display.java:897)com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)由以下原因造成: userclasses上的java.lang.NullPointerException.StateMachine.beforeMain (StateMachine.java:117)在com.codename1.ui.util.UIBuilder.showForm(UIBuilder.java 上生成的StateMachineBase.beforeShow(StateMachineBase.java:218) :2436)在com.codename1.ui.util.UIBuilder.showForm(UIBuilder.java:2483)在generate.StateMachineBase.startApp(StateMachi neBase.java:57) at generated.StateMachineBase.(StateMachineBase.java:31) at generated.StateMachineBase.(StateMachineBase.java:100) at userclasses.StateMachine.(StateMachine.java:38) at com.prime.cnna.MyApplication.start(MyApplication.java:62) neBase.java:57)在生成的.StateMachineBase。(StateMachineBase.java:31)在com.prime.cnna.MyApplication上的userclasses.StateMachine。(StateMachine.java:38)在生成的StateMachineBase。(StateMachineBase.java:100) .start(MyApplication.java:62)
Null pointer Exception on following line list.setRenderer(new GenericListCellRenderer(selected, unselected) { }); 空指针在以下行列表上发生异常。setRenderer(new GenericListCellRenderer(selected,unselected){}); * *

Specifying an exception without highlighting the actual line 117 isn't quite helpful. 在不突出显示实际第117行的情况下指定异常不是很有帮助。

You are doing a network request from the renderer which is probably not a good approach and would be invoked thousands of times per minute. 您正在执行来自渲染器的网络请求,这可能不是一个好方法,并且每分钟会被调用数千次。 You should use the model to implement lazy data fetching eg https://code.google.com/p/codenameone/source/browse/trunk/CodenameOne/src/com/codename1/cloud/CloudListModel.java 您应该使用该模型来实现延迟数据提取,例如https://code.google.com/p/codenameone/source/browse/trunk/CodenameOne/src/com/codename1/cloud/CloudListModel.java

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM