里面的AsyncTask BaseAdapter类不会setAdapter - 机器人 [英] BaseAdapter class wont setAdapter inside Asynctask - Android

查看:131
本文介绍了里面的AsyncTask BaseAdapter类不会setAdapter - 机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有收集用户名,注释和数字AsyncTask的。它把它们转换为字符串,然后想调用一个BaseAdapter类,创建一个适配器,该适配器设置为分类。但我的code不起作用,它崩溃的应用程序,这是我的code

 公共类DashboardActivity扩展ListActivity {
    字符串评论[];
    字符串的用户名[];
    一串数字[];
    ListView控件lstComments;

      类CreateCommentLists扩展了BaseAdapter {
            语境ctx_invitation;
            的String [] listComments;
            的String [] listNumbers;
            的String [] listUsernames;


            公共CreateCommentLists(字符串[]评论的String []用户名,字符串[]号)
            {
                超();

                listComments =意见;
                listNumbers =用户名;
                listUsernames =数字;
            }

            @覆盖
            公众诠释getCount将(){
                如果(空== listComments)
                {
                返回0;
                }

                // TODO自动生成方法存根
                返回listComments.length;
            }

            @覆盖
            公共对象的getItem(INT位置){
                // TODO自动生成方法存根
                返回listComments [位置]
            }

            @覆盖
            众长getItemId(INT位置){
                // TODO自动生成方法存根
                返回0;
            }

            @覆盖
            公共查看getView(INT位置,查看convertView,ViewGroup中父){
                // TODO自动生成方法存根
                视图V = NULL;
                尝试
                {
                    字符串充气= Context.LAYOUT_INFLATER_SERVICE;
                    LayoutInflater力=(LayoutInflater)ctx_invitation.getSystemService(充气);
                    V = li.inflate(R.layout.list_item,NULL);

                    TextView的评论查看=(TextView中)v.findViewById(R.id.listComment);
                    TextView的NumbersView =(TextView中)v.findViewById(R.id.listNumber);
                    TextView的usernamesView =(TextView中)v.findViewById(R.id.listPostedBy);


                    commentView.setText(listComments [位置]);
                    NumbersView.setText(listNumbers [位置]);
                    usernamesView.setText(listUsernames [位置]);
                }
                赶上(例外五)
                {
                    e.printStackTrace();
                }
                返回伏;
            }

          }




        类loadComments扩展的AsyncTask< JSONObject的,字符串,JSONObject的> {

            @覆盖
            在preExecute保护无效(){
                super.on preExecute();


            }

            @覆盖
            保护无效onProgressUpdate(字符串...值){
                super.onProgressUpdate(值);

            }

            受保护的JSONObject doInBackground(JSONObject的... PARAMS){


                JSONObject的json2 = CollectComments.collectComments(usernameforcomments,offsetNumber);


                    返回json2;



            }

            @覆盖
            保护无效onPostExecute(JSONObject的json2){
                尝试 {
                    如果(json2.getString(KEY_SUCCESS)!= NULL){
                        registerErrorMsg.setText();
                        字符串RES2 = json2.getString(KEY_SUCCESS);
                        如果(的Integer.parseInt(RES2)== 1){



                            JSONArray commentArray = json2.getJSONArray(KEY_COMMENT);
                            字符串评论[] =新的String [commentArray.length()];
                            的for(int i = 0; I< commentArray.length();我++){
                                评论[I] = commentArray.getString(ⅰ);
                            }
                            JSONArray numbersArray = json2.getJSONArray(KEY_NUMBER);
                            一串数字[] =新的String [numbersArray.length()];
                            的for(int i = 0; I< numbersArray.length();我++){
                                号码[I] = numbersArray.getString(ⅰ);
                            }
                            JSONArray usernameArray = json2.getJSONArray(KEY_USERNAME);
                            字符串的用户名[] =新的String [usernameArray.length()];
                            的for(int i = 0; I< usernameArray.length();我++){
                                用户名[I] = usernameArray.getString(ⅰ);
                            }

                            CreateCommentLists mycmlist =新CreateCommentLists(注释,用户名,数字);
                            lstComments =(ListView控件)findViewById(android.R.id.list);

                            lstComments.setAdapter(mycmlist);








                            } // end如果关键是== 1
                        其他{
                            //登记错误
                            registerErrorMsg.setText(json2.getString(KEY_ERROR_MSG));
                        } //结束其他
                    如果} //结束
                } //结束试

                赶上(JSONException E){
                    e.printStackTrace();
                } //结束抓
            }
        }


        新loadComments()执行();
   }
 

下面是我的logcat

  07-17 17:07:13.436:E / AndroidRuntime(23880):致命异常:主要
07-17 17:07:13.436:E / AndroidRuntime(23880):显示java.lang.NullPointerException
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.ListView.measureScrapChild(ListView.java:1163)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.ListView.measureHeightOfChildren(ListView.java:1294)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.ListView.onMeasure(ListView.java:1155)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.RelativeLayout.measureChild(RelativeLayout.java:579)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.RelativeLayout.onMeasure(RelativeLayout.java:392)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.measureHorizo​​ntal(LinearLayout.java:1017)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.onMeasure(LinearLayout.java:555)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436:E / AndroidRuntime(23880):在com.navdrawer.SimpleSideDrawer.onMeasure(SimpleSideDrawer.java:443)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436:E / AndroidRuntime(23880):在com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2162)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.View.measure(View.java:13011)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1091)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2505)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.os.Handler.dispatchMessage(Handler.java:99)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.os.Looper.loop(Looper.java:154)
07-17 17:07:13.436:E / AndroidRuntime(23880):在android.app.ActivityThread.main(ActivityThread.java:4945)
07-17 17:07:13.436:E / AndroidRuntime(23880):在java.lang.reflect.Method.invokeNative(本机方法)
07-17 17:07:13.436:E / AndroidRuntime(23880):在java.lang.reflect.Method.invoke(Method.java:511)
07-17 17:07:13.436:E / AndroidRuntime(23880):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
07-17 17:07:13.436:E / AndroidRuntime(23880):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-17 17:07:13.436:E / AndroidRuntime(23880):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

你检查,如果查看 v将您的getView返回()方法是空?捕异常捕获所有异常。没有真正有用的在我看来。这里发生的是,你还没有启动上下文ctx_invitation 。你应该在构造函数中做到这一点。现在,因为 ctx_invitation 为空,它会导致一个 NullPointerException异常这是捕获catch块。和查看 v仍然是空。

更改构造CreateCommentLists:

 公共CreateCommentLists(字符串[]评论的String []用户名,字符串[]号,DashboardActivity上下文)
        {
            超();

            listComments =意见;
            listNumbers =用户名;
            listUsernames =数字;
            ctx_invitation =背景;
        }
 

更改以下还有:

  CreateCommentLists mycmlist =新CreateCommentLists(注释,用户名,数字,DashboardActivity.this);
 

I have asynctask that gathers usernames, comments, and numbers. It places them into strings and is then suppose to call a BaseAdapter class, create an adapter, and set the adapter to the class. But my code doesn't work, it crashes the app, here is my code

   public class DashboardActivity extends ListActivity {
    String comments[];
    String usernames[];
    String numbers[];
    ListView lstComments;

      class CreateCommentLists extends BaseAdapter{
            Context ctx_invitation;
            String[] listComments;
            String[] listNumbers;
            String[] listUsernames;


            public CreateCommentLists(String[] comments, String[] usernames, String[] numbers)
            {
                super();

                listComments = comments;
                listNumbers = usernames;
                listUsernames = numbers;
            }

            @Override
            public int getCount() {
                if(null == listComments)
                {
                return 0;
                }   

                // TODO Auto-generated method stub
                return listComments.length;
            }

            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return listComments[position];
            }

            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                View v = null;
                try
                {
                    String inflater = Context.LAYOUT_INFLATER_SERVICE;
                    LayoutInflater li = (LayoutInflater)ctx_invitation.getSystemService(inflater);
                    v = li.inflate(R.layout.list_item, null);

                    TextView commentView = (TextView)v.findViewById(R.id.listComment);
                    TextView NumbersView = (TextView)v.findViewById(R.id.listNumber);
                    TextView usernamesView = (TextView)v.findViewById(R.id.listPostedBy);


                    commentView.setText(listComments[position]);
                    NumbersView.setText(listNumbers[position]);
                    usernamesView.setText(listUsernames[position]);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                return v;
            }

          }




        class loadComments extends AsyncTask<JSONObject, String, JSONObject> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();


            } 

            @Override
            protected void onProgressUpdate(String... values) {
                super.onProgressUpdate(values);

            } 

            protected JSONObject doInBackground(JSONObject... params) {


                JSONObject json2 = CollectComments.collectComments(usernameforcomments, offsetNumber);


                    return json2;



            }

            @Override
            protected void onPostExecute(JSONObject json2) {
                try {  
                    if (json2.getString(KEY_SUCCESS) != null) { 
                        registerErrorMsg.setText("");
                        String res2 = json2.getString(KEY_SUCCESS);
                        if(Integer.parseInt(res2) == 1){ 



                            JSONArray commentArray = json2.getJSONArray(KEY_COMMENT);
                            String comments[] = new String[commentArray.length()];
                            for ( int i=0; i<commentArray.length(); i++ ) {
                                comments[i] = commentArray.getString(i);
                            }
                            JSONArray numbersArray = json2.getJSONArray(KEY_NUMBER);
                            String numbers[] = new String[numbersArray.length()];
                            for ( int i=0; i<numbersArray.length(); i++ ) {
                                numbers[i] = numbersArray.getString(i);
                            }
                            JSONArray usernameArray = json2.getJSONArray(KEY_USERNAME);
                            String usernames[] = new String[usernameArray.length()];
                            for ( int i=0; i<usernameArray.length(); i++ ) {
                                usernames[i] = usernameArray.getString(i);
                            }

                            CreateCommentLists mycmlist = new CreateCommentLists(comments, usernames, numbers);
                            lstComments = (ListView)findViewById(android.R.id.list);

                            lstComments.setAdapter(mycmlist);








                            }//end if key is == 1
                        else{
                            // Error in registration
                            registerErrorMsg.setText(json2.getString(KEY_ERROR_MSG));
                        }//end else
                    }//end if
                } //end try

                catch (JSONException e) { 
                    e.printStackTrace();
                }//end catch    
            } 
        }


        new loadComments().execute();
   }

Here is my logCat

    07-17 17:07:13.436: E/AndroidRuntime(23880): FATAL EXCEPTION: main
07-17 17:07:13.436: E/AndroidRuntime(23880): java.lang.NullPointerException
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.ListView.measureScrapChild(ListView.java:1163)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1294)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.ListView.onMeasure(ListView.java:1155)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.RelativeLayout.measureChild(RelativeLayout.java:579)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:392)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1017)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:555)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at com.navdrawer.SimpleSideDrawer.onMeasure(SimpleSideDrawer.java:443)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4706)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2162)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.View.measure(View.java:13011)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1091)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2505)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.os.Looper.loop(Looper.java:154)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at android.app.ActivityThread.main(ActivityThread.java:4945)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at java.lang.reflect.Method.invokeNative(Native Method)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at java.lang.reflect.Method.invoke(Method.java:511)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-17 17:07:13.436: E/AndroidRuntime(23880):    at dalvik.system.NativeStart.main(Native Method)

解决方案

Have you checked if the View v that you return from your getView() method is null? Catching Exception catches all exceptions. Not really helpful in my opinion. What's happening here is that you have not initiated Context ctx_invitation. You should do this in the constructor. Now, since ctx_invitation is null, it causes a NullPointerException which is caught by the catch block. and View v remains null.

Change the constructor for CreateCommentLists:

public CreateCommentLists(String[] comments, String[] usernames, String[] numbers, DashboardActivity context)
        {
            super();

            listComments = comments;
            listNumbers = usernames;
            listUsernames = numbers;
            ctx_invitation = context;
        }

Change the following as well:

CreateCommentLists mycmlist = new CreateCommentLists(comments, usernames, numbers, DashboardActivity.this);

这篇关于里面的AsyncTask BaseAdapter类不会setAdapter - 机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆