Android 导航到碎片时应用程序崩溃

Android 导航到碎片时应用程序崩溃,android,Android,我是android新手,我在朋友的帮助下实现了我的Tab活动,并在网上找到了一些教程。但是,当我尝试导航到下一个选项卡时,会抛出一个错误。我已经看了一遍,无法理解这里发生了什么,或者我做错了什么 这是我的Android监视器中显示的错误: 03-29 19:20:55.958 1544-1544/com.xxxxxx.eventmanager E/Trace: error opening trace file: No such file or directory (2) 03-29 19:36:

我是android新手,我在朋友的帮助下实现了我的Tab活动,并在网上找到了一些教程。但是,当我尝试导航到下一个选项卡时,会抛出一个错误。我已经看了一遍,无法理解这里发生了什么,或者我做错了什么

这是我的Android监视器中显示的错误:

03-29 19:20:55.958 1544-1544/com.xxxxxx.eventmanager E/Trace: error opening trace file: No such file or directory (2)
03-29 19:36:25.011 1544-19421/com.xxxxxx.eventmanager E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 199 rows, 18 columns.
03-29 19:36:25.031 1544-19421/com.xxxxxx.eventmanager E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
    java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.database.CursorWindow.nativeGetString(Native Method)
        at android.database.CursorWindow.getString(CursorWindow.java:434)
        at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
        at com.xxxxxx.eventmanager.models.InvoiceModel.get(InvoiceModel.java:129)
        at com.xxxxxx.eventmanager.fragments.EventPurchasesFragment$InvoiceAsync.doInBackground(EventPurchasesFragment.java:132)
        at com.xxxxxx.eventmanager.fragments.EventPurchasesFragment$InvoiceAsync.doInBackground(EventPurchasesFragment.java:106)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
        at java.lang.Thread.run(Thread.java:856) 
03-29 19:36:25.981 1544-1544/com.xxxxxx.eventmanager E/WindowManager: Activity com.xxxxxx.eventmanager.EventDetailsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@b13069f8 that was originally added here
  android.view.WindowLeaked: Activity com.xxxxxx.eventmanager.EventDetailsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@b13069f8 that was originally added here
      at android.view.ViewRootImpl.<init>(ViewRootImpl.java:374)
      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
      at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
      at android.view.Window$LocalWindowManager.addView(Window.java:547)
      at android.app.Dialog.show(Dialog.java:277)
      at com.xxxxxx.eventmanager.fragments.EventPurchasesFragment$InvoiceAsync.onPreExecute(EventPurchasesFragment.java:122)
      at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
      at com.xxxxxx.eventmanager.fragments.EventPurchasesFragment.onStart(EventPurchasesFragment.java:69)
      at android.support.v4.app.Fragment.performStart(Fragment.java:2000)
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1102)
      at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:926)
      at android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1276)
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1634)
      at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
      at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:164)
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
      at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608)
      at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570)
      at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551)
      at com.xxxxxx.eventmanager.EventDetailsActivity$1.onTabSelected(EventDetailsActivity.java:57)
      at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1024)
      at android.support.design.widget.TabLayout.selectTab(TabLayout.java:994)
      at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1262)
      at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1360)
      at android.view.View$PerformClick.run(View.java:16966)
      at android.os.Handler.handleCallback(Handler.java:615)
      at android.os.Handler.dispatchMessage(Handler.java:92)
      at android.os.Looper.loop(Looper.java:137)
      at android.app.ActivityThread.main(ActivityThread.java:4745)
      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:786)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
      at dalvik.system.NativeStart.main(Native Method)
03-29 19:20:55.958 1544-1544/com.xxxxxx.eventmanager E/Trace:打开跟踪文件时出错:没有此类文件或目录(2)
03-29 19:36:25.011 1544-19421/com.xxxxxx.eventmanager E/CursorWindow:无法从包含199行18列的CursorWindow中读取第0行第1列。
03-29 19:36:25.031 1544-19421/com.xxxxxx.eventmanager E/AndroidRuntime:致命异常:异步任务#3
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done(AsyncTask.java:299)
位于java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:124)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
位于java.util.concurrent.FutureTask.run(FutureTask.java:137)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
运行(Thread.java:856)
原因:java.lang.IllegalStateException:无法从CursorWindow读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化。
位于android.database.CursorWindow.nativeGetString(本机方法)
位于android.database.CursorWindow.getString(CursorWindow.java:434)
位于android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
位于com.xxxxxx.eventmanager.models.InvoiceModel.get(InvoiceModel.java:129)
位于com.xxxxxx.eventmanager.fragments.EventPurchasesFragment$InvoiceAsync.doInBackground(EventPurchasesFragment.java:132)
位于com.xxxxxx.eventmanager.fragments.EventPurchasesFragment$InvoiceAsync.doInBackground(EventPurchasesFragment.java:106)
在android.os.AsyncTask$2.call(AsyncTask.java:287)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
位于java.util.concurrent.FutureTask.run(FutureTask.java:137)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
运行(Thread.java:856)
03-29 19:36:25.981 1544-1544/com.xxxxxx.eventmanager E/WindowManager:Activity com.xxxxxx.eventmanager.eventdetails活动已泄漏window com.android.internal.policy.impl.PhoneWindow$DecorView@b13069f8原来是加在这里的
android.view.WindowLeaked:Activity com.xxxxxx.eventmanager.eventdetails活动已泄漏window com.android.internal.policy.impl.PhoneWindow$DecorView@b13069f8原来是加在这里的
在android.view.ViewRootImpl。(ViewRootImpl.java:374)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
在android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)中
在android.view.Window$LocalWindowManager.addView(Window.java:547)
在android.app.Dialog.show上(Dialog.java:277)
位于com.xxxxxx.eventmanager.fragments.EventPurchasesFragment$InvoiceAsync.onPreExecute(EventPurchasesFragment.java:122)
位于android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
位于com.xxxxxx.eventmanager.fragments.EventPurchasesFragment.onStart(EventPurchasesFragment.java:69)
位于android.support.v4.app.Fragment.performStart(Fragment.java:2000)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1102)
在android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:926)上
位于android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1276)
位于android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1634)
位于android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
在android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:164)上
位于android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
位于android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608)
位于android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570)
位于android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551)
在com.xxxxxx.eventmanager.EventDetailsActivity$1.onTabSelected上(EventDetailsActivity.java:57)
位于android.support.design.widget.TabLayout.selectTab(TabLayout.java:1024)
位于android.support.design.widget.TabLayout.selectTab(TabLayout.java:994)
位于android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1262)
位于android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1360)
在android.view.view$PerformClick.run(view.java:16966)
位于android.os.Handler.handleCallback(Handler.java:615)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:4745)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在dalvik.system.NativeStart.main(本机方法)
这是我的片段的活动:

package com.xxxxxx.eventmanager.fragments;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.xxxxxx.eventmanager.EventDetailsActivity;
import com.xxxxxx.eventmanager.R;
import com.xxxxxx.eventmanager.adapters.InvoiceBaseAdapter;
import com.xxxxxx.eventmanager.models.InvoiceModel;
import com.xxxxxx.eventmanager.objects.Invoice;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by djoks on 22/03/2016.
 */
public class EventPurchasesFragment extends Fragment {

    // Shared Preferences
    SharedPreferences settings;
    Context context;
    View view;

    InvoiceModel im;

    //Array Adapter that will hold our ArrayList and display the items on the ListView
    InvoiceBaseAdapter adapter;
    List<Invoice> il;
    ListView invoiceListView;

    Invoice io;

    InvoiceBroadcastReceiver receiver;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_event_purchases, container, false);

        this.context = container.getContext();
        this.im = new InvoiceModel(context);
        this.io = new Invoice();

        return view;
    }

    @Override
    public void onStart() {
        super.onStart();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            new InvoiceAsync().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
        }else{
            new InvoiceAsync().execute();
        }

        invoiceListView = (ListView) view.findViewById(R.id.invoiceListView);
        invoiceListView.setFocusable(false);
        invoiceListView.setClickable(true);
        invoiceListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                /*TextView eventIdView = (TextView) view.findViewById(R.id.eventIdView);
                int eventId = Integer.parseInt(eventIdView.getText().toString());

                Intent i = new Intent(context, EventDetailsActivity.class);
                i.putExtra("eventId", eventId);
                startActivity(i);*/
            }
        });
    }

    @Override
    public void onResume() {
        super.onResume();

        IntentFilter filter = new IntentFilter("com.xxxxxx.eventmanager.UPDATE_INVOICE_DATASOURCE");
        receiver = new InvoiceBroadcastReceiver();
        context.registerReceiver(receiver, filter);
    }

    @Override
    public void onPause() {
        super.onPause();

        context.unregisterReceiver(receiver);
    }

    private class InvoiceAsync extends AsyncTask<Void, Void, ArrayList<Invoice>> {
        ProgressDialog pd;
        InvoiceModel im;
        String msg = "";

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();

            if (pd == null) {
                pd = new ProgressDialog(context);
                pd.setMessage("Loading Invoices");
                pd.setIndeterminate(true);
                pd.setCancelable(true);
                pd.setCanceledOnTouchOutside(false);
                pd.show();
            }

        }

        @Override
        protected ArrayList<Invoice> doInBackground(Void... params) {
            // TODO Auto-generated method stub

            InvoiceModel im = new InvoiceModel(context);
            return im.get();
        }

        @Override
        protected void onPostExecute(ArrayList<Invoice> result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            if(pd.isShowing()){
                pd.dismiss();
            }

            if(result !=null && result.size() > 0){
                adapter = new InvoiceBaseAdapter(context, result);
                invoiceListView.setAdapter(adapter);
                invoiceListView.setTextFilterEnabled(true);
                adapter.notifyDataSetChanged();
            } else {
                Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
            }
        }


    }

    private class InvoiceBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                new InvoiceAsync().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
            }else{
                new InvoiceAsync().execute();
            }
        }
    }
}
package com.xxxxxx.eventmanager.fragments;
进口安卓
package com.xxxxxx.eventmanager.models;

import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.xxxxxx.eventmanager.database.LocalDBDataSource;
import com.xxxxxx.eventmanager.objects.Event;
import com.xxxxxx.eventmanager.objects.Invoice;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by djoks on 28/03/2016.
 */
public class InvoiceModel {

    Context context;
    SQLiteDatabase db;
    SharedPreferences settings;
    AppModel app;

    public InvoiceModel(Context c) {
        super();
        this.context = c;
        this.settings = c.getSharedPreferences("App", context.MODE_PRIVATE);
        this.app = new AppModel(c);
    }

    private void insert(Invoice i) {
        ContentValues cv = new ContentValues();
        cv.put("invoice_id", i.getInvoiceId());
        cv.put("type", i.getType());
        cv.put("vendor_id", i.getVendorId());
        cv.put("vendor_name", i.getVendorName());
        cv.put("reference_code", i.getReferenceCode());
        cv.put("total_no_of_tickets", i.getTotalNoOfTickets());
        cv.put("total_tickets_amount", i.getTotalTicketsAmount());
        cv.put("total_extras_amount", i.getTotalExtrasAmount());
        cv.put("total_amount_billed", i.getTotalAmountBilled());
        cv.put("total_charges_applied", i.getTotalChargesApplied());
        cv.put("total_discounts_applied", i.getTotalDiscountsApplied());
        cv.put("customer", i.getCustomerDetails().toString());
        cv.put("tickets", i.getTicketsPurchased().toString());
        cv.put("extras", i.getExtrasPurchased().toString());
        cv.put("created_at", i.getCreatedAt());
        cv.put("updated_at", i.getUpdatedAt());
        cv.put("deleted_at", i.getDeletedAt());
        db.insert("invoices", null, cv);
    }

    private void update(Invoice i){
        String whereClause = "invoice_id = ?";
        String[] whereParams = {String.valueOf(i.getInvoiceId())};

        ContentValues cv = new ContentValues();
        cv.put("invoice_id", i.getInvoiceId());
        cv.put("type", i.getType());
        cv.put("vendor_id", i.getVendorId());
        cv.put("vendor_name", i.getVendorName());
        cv.put("reference_code", i.getReferenceCode());
        cv.put("total_no_of_tickets", i.getTotalNoOfTickets());
        cv.put("total_tickets_amount", i.getTotalTicketsAmount());
        cv.put("total_extras_amount", i.getTotalExtrasAmount());
        cv.put("total_amount_billed", i.getTotalAmountBilled());
        cv.put("total_charges_applied", i.getTotalChargesApplied());
        cv.put("total_discounts_applied", i.getTotalDiscountsApplied());
        cv.put("customer", i.getCustomerDetails().toString());
        cv.put("tickets", i.getTicketsPurchased().toString());
        cv.put("extras", i.getExtrasPurchased().toString());
        cv.put("created_at", i.getCreatedAt());
        cv.put("updated_at", i.getUpdatedAt());
        cv.put("deleted_at", i.getDeletedAt());
        db.update("invoices", cv, whereClause, whereParams);
    }

    public void save(Invoice i) {

        db = LocalDBDataSource.getHelper(context).getWritableDatabase();

        String whereClause = "invoice_id = ?";
        String[] whereParams = {String.valueOf(i.getInvoiceId())};
        String[] columns = {"*"};

        Cursor c = null;
        try{
            c = db.query("invoices", columns, whereClause, whereParams, null, null, null);
            if(c.getCount() > 0)
            {
                update(i);
            } else{
                insert(i);
            }

        } finally {
            if(c != null && !c.isClosed()){
                c.close();
            }

            if(db != null && db.isOpen()){
                db.close();
            }

        }

    }

    public ArrayList<Invoice> get() {
        db = LocalDBDataSource.getHelper(context).getWritableDatabase();
        Cursor c = null;
        String[] columns = {"*"};

        ArrayList<Invoice> invoices = new ArrayList<Invoice>();

        try{
            c = db.query(false, "invoices", columns, null, null, null, null, null, null);
            if(c.getCount() > 0){
                while(c.moveToNext()){
                    invoices.add(new Invoice(
                            c.getInt(c.getColumnIndex("invoice_id")),
                            c.getString(c.getColumnIndex("type")),
                            c.getInt(c.getColumnIndex("vendor_id")),
                            c.getString(c.getColumnIndex("venue_name")),
                            c.getString(c.getColumnIndex("reference_code")),
                            c.getInt(c.getColumnIndex("total_no_of_tickets")),
                            c.getFloat(c.getColumnIndex("total_tickets_amount")),
                            c.getFloat(c.getColumnIndex("total_extras_amount")),
                            c.getFloat(c.getColumnIndex("total_amount_billed")),
                            c.getFloat(c.getColumnIndex("total_charges_applied")),
                            c.getFloat(c.getColumnIndex("total_discounts_applied")),
                            new JSONObject(c.getString(c.getColumnIndex("customer"))),
                            new JSONArray(c.getString(c.getColumnIndex("tickets"))),
                            new JSONArray(c.getString(c.getColumnIndex("extras"))),
                            c.getString(c.getColumnIndex("created_at")),
                            c.getString(c.getColumnIndex("updated_at")),
                            c.getString(c.getColumnIndex("deleted_at"))
                    ));
                }

            }
        } catch (JSONException e) {
            e.printStackTrace();
        } finally{
            if (c !=null && !c.isClosed()) {
                c.close();
            }

            if(db!=null && db.isOpen()) {
                db.close();
            }
        }

        return invoices.size() > 0 ? invoices : new ArrayList<Invoice>();
    }
}
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.
Make sure the Cursor is initialized correctly before accessing data from it.
    at android.database.CursorWindow.nativeGetString(Native Method)
    at android.database.CursorWindow.getString(CursorWindow.java:434)
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
    at com.xxxxxx.eventmanager.models.InvoiceModel.get(InvoiceModel.java:129)
c.getString(c.getColumnIndex("venue_name")),
   c.getString(c.getColumnIndex("venue_name")),
c.getString(c.getColumnIndex("vendor_name")),