4

lang.NullPointerException android.widget.ArrayAdapter.init(ArrayAdapter.java) Arraylist 値を customAdapter クラスに追加し、その値を listview に設定しています。以下のコードを参照してください。

ありがとう

private void fetchCallLogsDetails(String selectedId) {
        this.SelectedLogId = selectedId;
        new FetchCallLogDetailsAsyncTask() {
            protected void onPostExecute(Boolean result) {

                if (mCallLogModel.getmPhoto() != null) {
                    mCallLogPhoto.setImageBitmap(mCallLogModel.getmPhoto());
                }

                mCallLogDetailName.setText(mCallLogModel.getmName());
                mCallLogDetailNumber.setText(mCallLogModel.getmNumber());

                mCallLogDetailName.setTextSize(12);
                mCallLogDetailNumber.setTextSize(10);

                mLogAuditUtilList = mCallLogModel.getmLogAuditUtilList();
                if (mLogAuditUtilList != null) {
                    mCallLogAuditArrayAdapter = new CallLogAuditArrayAdapter(
                            getActivity(), R.id.details_audit_log_list,
                            mLogAuditUtilList);

                    mAuditListView.setAdapter(mCallLogAuditArrayAdapter);
                }

            };
        }.execute("");
    }
    class FetchCallLogDetailsAsyncTask extends
            AsyncTask<String, Integer, Boolean> {
        @Override
        protected Boolean doInBackground(String... params) {
            // reading call logs from contentReslover
            mCallLogUtil = CallLogUtil.newInstance(mconContentResolver);
            mCallLogModel = mCallLogUtil.selectedLogDetails(SelectedLogId);
            return false;
        }

    }



customeAdapter class
-------------------------

public class CallLogAuditArrayAdapter extends ArrayAdapter<LogAuditUtil> {
    private LayoutInflater minflater;
    private ImageView mCallTypeImage;

    public CallLogAuditArrayAdapter(Context context, int textViewResourceId,
            List<LogAuditUtil> objects) {
        super(context, textViewResourceId, objects);

        minflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final LogAuditUtil mLogAuditUtil = this.getItem(position);

        convertView = minflater.inflate(R.layout.call_logs_details_list_view,
                null);
        TextView mCallType = (TextView) convertView
                .findViewById(R.id.call_logs_details_list_view_type_id);
        TextView mDetailsDate = (TextView) convertView
                .findViewById(R.id.call_logs_details_list_view_date_id);
        mCallTypeImage = (ImageView) convertView
                .findViewById(R.id.call_logs_details_list_view_type_image_id);

        TextView mCallDuration = (TextView) convertView
                .findViewById(R.id.call_logs_details_list_view_call_duration_id);

        mCallType.setTextSize(12);
        mDetailsDate.setTextSize(10);
        mCallDuration.setTextSize(8);

        switch (Integer.parseInt(mLogAuditUtil.getmAuditType())) {
        case 1:
            mCallType.setText(R.string.text_incoming_call);
            mCallTypeImage.setImageResource(R.drawable.incoming_call);
            break;

        case 2:
            mCallTypeImage.setImageResource(R.drawable.outgoing_call);
            mCallType.setText(R.string.text_outgoing_call);
            break;

        case 3:
            mCallTypeImage.setImageResource(R.drawable.missed_call);
            mCallType.setText(R.string.text_missed_call);
            break;
        }

        mDetailsDate.setText(mLogAuditUtil.getmAuditDate());
        mCallDuration.setText(mLogAuditUtil.getmAuditDuration());
        return convertView;
    }

}

このコードを実行しているとき、カタログに打撃エラーが表示されます

E/AndroidRuntime(3047): FATAL EXCEPTION: main
06-07 19:58:56.257: E/AndroidRuntime(3047): java.lang.NullPointerException
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at com.movirtu.contactsUtil.CallLogsArrayAdapter.<init>(CallLogsArrayAdapter.java:30)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at com.movirtu.fragments.CallLogsFragment$2.onPostExecute(CallLogsFragment.java:88)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at com.movirtu.fragments.CallLogsFragment$2.onPostExecute(CallLogsFragment.java:1)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.os.AsyncTask.finish(AsyncTask.java:602)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.os.AsyncTask.access$600(AsyncTask.java:156)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.os.Looper.loop(Looper.java:137)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at android.app.ActivityThread.main(ActivityThread.java:4340)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at java.lang.reflect.Method.invokeNative(Native Method)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at java.lang.reflect.Method.invoke(Method.java:511)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-07 19:58:56.257: E/AndroidRuntime(3047):     at dalvik.system.NativeStart.main(Native Method)
06-07 19:58:58.917: I/Process(3047): Sending signal. PID: 3047 SIG: 9
4

1 に答える 1

8

この問題は、アダプターの作成時に getActivity() が null を返すことが原因で発生します。

 new CallLogAuditArrayAdapter(getActivity(), R.id.details_audit_log_list, mLogAuditUtilList);

これは、Activity がまだフラグメントにアタッチされていないか、フラグメントにアタッチされていない場合に発生する可能性があります。これを解決するには、メソッドfetchCallLogsDetailsがアタッチされたアクティビティの有効な状態でのみ呼び出されるようにするか、 getActivity() == nullまたはgetActivity.isFinishing()の場合は呼び出しを無視することができます。

于 2013-10-31T11:30:20.870 に答える