1

ユーザー名、コメント、および番号を収集する asynctask があります。それらを文字列に配置してから、BaseAdapter クラスを呼び出し、アダプターを作成し、アダプターをクラスに設定することを想定しています。しかし、私のコードは機能しません。アプリがクラッシュします。これが私のコードです

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

ここに私の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)
4

4 に答える 4

1

ViewgetView() メソッドから返される v が null かどうかを確認しましたか? キャッチExceptionはすべての例外をキャッチします。私の意見ではあまり役に立ちません。ここで起きていることは、あなたが開始していないということですContext ctx_invitation。これはコンストラクターで行う必要があります。現在、ctx_invitationは null であるためNullPointerException、catch ブロックによってキャッチされる が発生します。Viewv は null のままです。

CreateCommentLists のコンストラクターを変更します。

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

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

以下も変更します。

CreateCommentLists mycmlist = new CreateCommentLists(comments, usernames, numbers, DashboardActivity.this);
于 2013-07-17T21:26:46.163 に答える
1

これが助けになることを願っています、

onPostExecute インクルード (AsyncTask 内)

ExampleAdapter sectionedAdapter = new EfficientAdapter(ClassInfoThread.this,getBaseContext()); listView.setAdapter(sectionedAdapter);

アダプタークラスにこのコンストラクターを追加します

public ExampleAdapter (ExampleThread exampleThread,Context コンテキスト) { mInflater = LayoutInflater.from(context); }

幸運を。

ナンダキショアP

于 2013-12-05T08:41:44.870 に答える
0

現在、ctx_invitation に値が割り当てられることはありません。ctx_invitation に値を割り当てるには、おそらくコンストラクターが必要です。

于 2013-07-17T21:22:54.140 に答える
0

この質問を見ると、アダプターの getView メソッドから null ビューを返している可能性があります。getView メソッドにいくつかのブレークポイントを挿入してみて、null ビューを返す場所を見つけてください。

また、BaseAdapter の ctx_invitation への参照をどこに保存していますか。

コンストラクターでは、それを渡したい場合があります

于 2013-07-17T21:23:13.343 に答える