onClick()崩溃程序“bignerdranch”“criminalintent”项目

时间:2017-04-30 16:33:04

标签: android onclick fatal-error buffer-overflow executors

我是Android编程的新手,但我有一些以前的java经验。我正在从一个大书呆子牧场指南到android编程的项目。因为我缺乏使用android的经验,所以我在学习的同时复制代码,而不是试图用它来创造。但是我已经达到犯罪意图应用程序中的一个点,我的应用程序每次单击我的RecyclerView中的项目时都会崩溃。我在网上搜索过,发现其他问题有点像这样但是他们没有帮我解决这个问题。正如我所说,我是新手Android和额外,意图和所有这些。任何人都可以帮助我找出原因以及如何解决它?我发布了一些代码以及Exceptions堆栈跟踪。这是包含回收站视图的列表片段:

package com.bignerdranch.android.criminalintent;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.NavUtils;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.menu.ExpandedMenuView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.IllegalFormatCodePointException;
import java.util.List;

public class CrimeListFragment extends Fragment{
private RecyclerView mCrimeRecyclerView;
private CrimeAdapter mAdapter;

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

    mCrimeRecyclerView = (RecyclerView) view.findViewById(R.id.crime_recycler_view);
    mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    updateUI();

    return view;
}//end onCreate

private void updateUI(){
    CrimeLab crimeLab = CrimeLab.get(getActivity());
    List<Crime> crimes = crimeLab.getCrimes();

    if (mAdapter == null){
        mAdapter = new CrimeAdapter(crimes);
        mCrimeRecyclerView.setAdapter(mAdapter);
    }else {
        mAdapter.notifyDataSetChanged();
    }


}//end updateUI()

private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    private TextView mTitleTextView;
    private TextView mDateTextView;
    private Crime mCrime;
    private ImageView mSolvedImageView;

    public CrimeHolder(LayoutInflater inflater, ViewGroup parent){
        super(inflater.inflate(R.layout.list_item_crime, parent, false));
        itemView.setOnClickListener(this); 

        mTitleTextView = (TextView) itemView.findViewById(R.id.crime_title);
        mDateTextView = (TextView) itemView.findViewById(R.id.crime_date);
        mSolvedImageView = (ImageView) itemView.findViewById(R.id.crime_solved);
    }//end constructor

    @Override
    public void onClick(View view){
        try {
            Intent intent = CrimePagerActivity.newIntent(getActivity(), mCrime.getId());
            startActivity(intent); // something wrong with the activity starting when clicked!
        }catch(Exception e){
                Log.d("ONCLICK", e.toString());
            }
    }//end onCLick()

    public void bind(Crime crime){
        mCrime = crime;
        mTitleTextView.setText(crime.getTitle());
        mDateTextView.setText(mCrime.getDate().toString());
        mSolvedImageView.setVisibility(crime.isSolved() ? View.VISIBLE : View.GONE);
    }//end bind()

}//end CrimeHolder inner Class

private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder>{

    private List<Crime> mCrimes;

    public CrimeAdapter(List<Crime> crimes){
        mCrimes = crimes;
    }//end constructor
    @Override
    public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType){
        LayoutInflater layoutInflater = LayoutInflater.from(getActivity());

        return new CrimeHolder(layoutInflater, parent);

    }// end onCreateViewHolder

    @Override
    public void onBindViewHolder(CrimeHolder holder, int position){
        Crime crime = mCrimes.get(position);
        holder.bind(crime);
    }

    @Override
    public int getItemCount(){
        return mCrimes.size();
    }

}//end CrimeAdapter inner Class

}//end CrimeListFragment class

这是应该在点击时启动的活动的类:

package com.bignerdranch.android.criminalintent;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ViewPropertyAnimatorCompatSet;
import java.util.List;
import java.util.UUID;

public class CrimePagerActivity extends AppCompatActivity {

private static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id";

private ViewPager mViewPager;
private List<Crime> mCrimes;

public static Intent newIntent(Context packageContext, UUID crimeId){
    Intent intent = new Intent(packageContext, CrimePagerActivity.class);
    intent.putExtra(EXTRA_CRIME_ID, crimeId);
    return intent;
}

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_crime_pager);

    UUID crimeId = (UUID) getIntent().getSerializableExtra(EXTRA_CRIME_ID);

    mViewPager = (ViewPager) findViewById(R.id.crime_view_pager);
    mCrimes = CrimeLab.get(this).getCrimes();

    FragmentManager fragmentManager = getSupportFragmentManager();
    mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
        @Override
        public Fragment getItem(int position) {
            Crime crime = mCrimes.get(position);
            return CrimeFragment.newInstance(crime.getId());
        }

        @Override
        public int getCount() {
            return mCrimes.size();
        }
    });
}// end onCreate()

}//end crimePagerAtivity class

这里是CrimeLab类的代码:

package com.bignerdranch.android.criminalintent;

import android.content.Context;

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

public class CrimeLab {
private static CrimeLab sCrimeLab;
private List<Crime> mCrimes;

public static CrimeLab get(Context context){
    if(sCrimeLab == null){
        sCrimeLab = new CrimeLab(context);
    }

    return sCrimeLab;
}//end get()

private CrimeLab(Context context){

}//end constructor

public List<Crime> getCrimes(){
    mCrimes = new ArrayList<>();
    for (int i = 0; i < 100; i++){
        Crime crime = new Crime();
        crime.setTitle("Crime #" + i);
        crime.setSolved(i % 2 == 0); //every other crime will be checked!
        mCrimes.add(crime);
    }
    return mCrimes;
}//end getCrimes

public Crime getCrime(UUID id){
    for (Crime crime : mCrimes){
        if (crime.getId().equals(id)){
            return crime;
        }
    }
 return null;
}//end getCrime()

}//end CrimeLab class

这是我的Exeptions堆栈跟踪,它是从CrimeHolders onClick()中的try / catch块记录的:

04-30 09:11:33.090 2526-14527/com.google.android.googlequicksearchbox:search W/ErrorProcessor: onFatalError, processing error from engine(4)
                                                                                           com.google.android.apps.gsa.shared.speech.a.g: Error reading from input stream
                                                                                               at com.google.android.apps.gsa.staticplugins.recognizer.i.a.a(SourceFile:342)
                                                                                               at com.google.android.apps.gsa.staticplugins.recognizer.i.a$1.run(SourceFile:1367)
                                                                                               at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
                                                                                               at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                               at com.google.android.apps.gsa.shared.util.concurrent.a.ak.run(SourceFile:66)
                                                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                                               at java.lang.Thread.run(Thread.java:761)
                                                                                               at com.google.android.apps.gsa.shared.util.concurrent.a.ad$1.run(SourceFile:85)
                                                                                            Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
                                                                                               at com.google.android.apps.gsa.speech.audio.Tee.g(SourceFile:2531)
                                                                                               at com.google.android.apps.gsa.speech.audio.ap.read(SourceFile:555)
                                                                                               at java.io.InputStream.read(InputStream.java:101)
                                                                                               at com.google.android.apps.gsa.speech.audio.al.run(SourceFile:362)
                                                                                               at com.google.android.apps.gsa.speech.audio.ak$1.run(SourceFile:471)
                                                                                               at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
                                                                                               at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                               at com.google.android.apps.gsa.shared.util.concurrent.a.ak.run(SourceFile:66)
                                                                                               at com.google.android.apps.gsa.shared.util.concurrent.a.ax.run(SourceFile:139)
                                                                                               at com.google.android.apps.gsa.shared.util.concurrent.a.ax.run(SourceFile:139)
                                                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                                                                               at java.lang.Thread.run(Thread.java:761) 
                                                                                               at com.google.android.apps.gsa.shared.util.concurrent.a.ad$1.run(SourceFile:85)

提前感谢您的帮助。

这里是仅限应用程序的日志。不确定这是否有帮助:

04-30 09:11:34.042 14542-14542/? I/art: Not late-enabling -Xcheck:jni 
(already on)
04-30 09:11:34.043 14542-14542/? W/art: Unexpected CPU variant for X86 using 
defaults: x86
04-30 09:11:34.187 14542-14542/com.bignerdranch.android.criminalintent 
W/System: ClassLoader referenced unknown path: 
/data/app/com.bignerdranch.android.criminalintent-1/lib/x86
04-30 09:11:34.203 14542-14542/com.bignerdranch.android.criminalintent 
I/InstantRun: starting instant run server: is main process
04-30 09:11:34.298 14542-14542/com.bignerdranch.android.criminalintent 

04-30 09:11:34.298 14542-14542/com.bignerdranch.android.criminalintent 
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter 
04-30 09:11:34.298 14542-14542/com.bignerdranch.android.criminalintent W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
04-30 09:11:34.623 14542-14572/com.bignerdranch.android.criminalintent I/OpenGLRenderer: Initialized EGL, version 1.4
04-30 09:11:34.623 14542-14572/com.bignerdranch.android.criminalintent D/OpenGLRenderer: Swap behavior 1
04-30 09:11:34.624 14542-14572/com.bignerdranch.android.criminalintent W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
04-30 09:11:34.624 14542-14572/com.bignerdranch.android.criminalintent D/OpenGLRenderer: Swap behavior 0
04-30 09:11:34.802 14542-14542/com.bignerdranch.android.criminalintent W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView

好的,所以这就是我现在的堆栈跟踪:

[ 04-30 13:21:32.818  5236: 5236 D/         ]
                                             HostConnection::get() New Host 
Connection established 0x92014100, tid 5236
04-30 13:29:45.065 5236-5236/com.bignerdranch.android.criminalintent 
E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.bignerdranch.android.criminalintent, PID: 5236

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.bignerdranch.android.criminalintent.Crime.getTitle()' on a null object reference

at com.bignerdranch.android.criminalintent.CrimeFragment.onCreateView(CrimeFragment.java:50)

at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)

at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)

at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)

at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)

at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)

at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)

at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)

at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)

at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984)

at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626)

at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166)

at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)

at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)

at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)

at android.view.View.measure(View.java:19857)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)

at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)

at android.view.View.measure(View.java:19857)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)

at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)

at android.view.View.measure(View.java:19857)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)

at android.view.View.measure(View.java:19857)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)

at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)

at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)

at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)

at android.view.View.measure(View.java:19857)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)

at com.android.internal.policy.DecorView.onMeasure(DecorView.java:689)

at android.view.View.measure(View.java:19857)

at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2275)

at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1366)

at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1619)

at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)

at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)

at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)

at android.view.Choreographer.doCallbacks(Choreographer.java:686)

at android.view.Choreographer.doFrame(Choreographer.java:621)

at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)

at android.os.Handler.handleCallback(Handler.java:751)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:154)

at android.app.ActivityThread.main(ActivityThread.java:6119)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

0 个答案:

没有答案