片段不能被转换为android.app.activity转换为、片段、android、app

2023-09-04 03:17:45 作者:衬我孤独

我知道这个问题已经被问过,但他们没有在同样的情况,我在

我的问题,我需要让我的PostPhotosActivity类retainInstance。我做这件事的方法是把它变成一个片段。不幸的是我总是收到此错误。

  12-13 14:38:55.669:E / AndroidRuntime(30234):致命异常:主要

12-13 14:38:55.669:E / AndroidRuntime(30234):java.lang.RuntimeException的:无法实例活动ComponentInfo {trade.ly.tradely / trade.ly.tradely.PostPhotosActivity}:java.lang.ClassCastException:贸易.ly.tradely.PostPhotosActivity不能转换为android.app.Activity

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.os.Handler.dispatchMessage(Handler.java:99)

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.os.Looper.loop(Looper.java:137)

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.app.ActivityThread.main(ActivityThread.java:5039)

12-13 14:38:55.669:E / AndroidRuntime(30234):在java.lang.reflect.Method.invokeNative(本机方法)

12-13 14:38:55.669:E / AndroidRuntime(30234):在java.lang.reflect.Method.invoke(Method.java:511)

12-13 14:38:55.669:E / AndroidRuntime(30234):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)

12-13 14:38:55.669:E / AndroidRuntime(30234):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

12-13 14:38:55.669:E / AndroidRuntime(30234):在dalvik.system.NativeStart.main(本机方法)

12-13 14:38:55.669:E / AndroidRuntime(30234):由:java.lang.ClassCastException:trade.ly.tradely.PostPhotosActivity不能转换为android.app.Activity

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.app.Instrumentation.newActivity(Instrumentation.java:1054)

12-13 14:38:55.669:E / AndroidRuntime(30234):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)

12-13 14:38:55.669:E / AndroidRuntime(30234):11 ...更多
 

下面是多数民众赞成让所有的错误PostPhotosActivity。

 公共类PostPhotosActivity扩展android.app.Fragment {

公共静态最终字符串变量=PostPhotosActivity;

字符串名称,价格,描述,maincat,subcat,PNAME,pemail,pphone,pmeet,imageUri;

公共静态最后弦乐TEMP_PHOTO_FILE_NAME =temp_photo.jpg;

公共静态最终诠释REQUEST_ code_GALLERY =为0x1;
公共静态最终诠释REQUEST_ code_TAKE_PICTURE = 0X2;
公共静态最终诠释REQUEST_ code_CROP_IMAGE = 0x3中;
私人ImageView的mImageView;
私人文件mFileTemp;
ParseFile文件;
双纬度;
最终的String []项目=新的String [] {从相机拍摄,从库中选择};

双经度;
Button按钮;



@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
        捆绑savedInstanceState){


     查看查看= inflater.inflate(R.layout.activity_post_photos,集装箱,假);


     捆绑额外= getActivity()getIntent()getExtras()。
     如果(临时演员!= NULL)
     {
        标题= extras.getString(TITLE); //基于密钥获得的价值
        价格= extras.getString(代价); //基于密钥获得的价值
        说明= extras.getString(说明); //基于密钥获得的价值
        maincat = extras.getString(MAINCAT); //基于密钥获得的价值
        subcat = extras.getString(SUBCAT); //基于密钥获得的价值
        PNAME = extras.getString(PNAME); //基于密钥获得的价值
        pemail = extras.getString(PEMAIL); //基于密钥获得的价值
        pphone = extras.getString(PPHONE); //基于密钥获得的价值
        pmeet = extras.getString(PMEET); //基于密钥获得的价值
        纬度= extras.getDouble(纬度);
        经度= extras.getDouble(长);
    }



按钮newPost =(按钮)view.findViewById(R.id.post_data);
newPost.setVisibility(View.INVISIBLE);

newPost.setOnClickListener(新View.OnClickListener(){
    公共无效的onClick(视图v){
        //执行上的点击动作

        ParseGeoPoint点=新ParseGeoPoint(纬度,经度);
        的parseObject setPost =新的parseObject(帖子);

        //创建与当前用户的作者的关系
        setPost.put(作家,ParseUser.getCurrentUser());

        //获取位置

        setPost.put(位置,点);
        setPost.put(标题,标题);
        setPost.put(价格,价格);
        setPost.put(描述,说明);
        setPost.put(MainCat,maincat);
        setPost.put(SubCat,subcat);
        setPost.put(PNAME,PNAME);
        setPost.put(PEmail,pemail);
        setPost.put(PPhone,pphone);
        setPost.put(PMeet,pmeet);
        setPost.put(照片,文件);

        setPost.saveInBackground();

        意向意图=新的意图(getActivity(),Flow.class);
       startActivity(意向);
    }
});



    ArrayAdapter<字符串>适配器=新的ArrayAdapter<字符串>(getActivity(),android.R.layout.select_dialog_item,项目);
    AlertDialog.Builder建设者=新AlertDialog.Builder(getActivity());

    builder.setTitle(选择图片);
    builder.setAdapter(适配器,新DialogInterface.OnClickListener(){
        公共无效的onClick(DialogInterface对话,诠释项){//挑选
                                                                // 相机
            如果(项目== 0){

                拍照片();

            }其他{//挑选文件

                openGallery();

            }
        }
    });

    最后AlertDialog对话框= builder.create();

    mImageView =(ImageView的)view.findViewById(R.id.iv_photo);
    mImageView.setOnClickListener(新OnClickListener(){
        公共无效的onClick(视图v){

            dialog.show();
        }
    });



        字符串状态= Environment.getExternalStorageState();
        如果(Environment.MEDIA_MOUNTED.equals(州)){
                mFileTemp =新的文件(Environment.getExternalStorageDirectory(),TEMP_PHOTO_FILE_NAME);
        }
        其他 {
                mFileTemp =新的文件(getActivity()getFilesDir(),TEMP_PHOTO_FILE_NAME。);
        }
        setRetainInstance(真正的);
        返回查看;

}

私人无效takePicture(){

    意向意图=新的意图(MediaStore.ACTION_IM​​AGE_CAPTURE);

    尝试 {
            乌里mImageCaptureUri = NULL;
            字符串状态= Environment.getExternalStorageState();
            如果(Environment.MEDIA_MOUNTED.equals(州)){
                    mImageCaptureUri = Uri.fromFile(mFileTemp);
            }
            其他 {
                    / *
                     *将溶液取自这里:http://stackoverflow.com/questions/10042695/how-to-get-camera-result-as-a-uri-in-data-folder
                     * /
                    mImageCaptureUri = InternalStorageContentProvider.CONTENT_URI;
            }
        intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri);
        intent.putExtra(回归数据,真正的);
        startActivityForResult(意向,REQUEST_ code_TAKE_PICTURE);
    }赶上(ActivityNotFoundException E){

        Log.d(TAG,不能拍照,E);
    }
}

私人无效openGallery(){

    意图photoPickerIntent =新的意图(Intent.ACTION_PICK);
    photoPickerIntent.setType(图像/ *);
    startActivityForResult(photoPickerIntent,REQUEST_ code_GALLERY);
}

私人无效startCropImage(){

    意向意图=新的意图(getActivity(),CropImage.class);
    intent.putExtra(CropImage.IMAGE_PATH,mFileTemp.getPath());
    intent.putExtra(CropImage.SCALE,真正的);

    intent.putExtra(CropImage.ASPECT_X,1);
    intent.putExtra(CropImage.ASPECT_Y,1);

    startActivityForResult(意向,REQUEST_ code_CROP_IMAGE);
}

@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){

    如果(结果code!= Activity.RESULT_OK){

        返回;
    }

    点阵位图;

    开关(要求code){

        案例REQUEST_ code_GALLERY:

            尝试 {

                InputStream中的InputStream = getActivity()getContentResolver()openInputStream(data.getData())。;
                FileOutputStream中的FileOutputStream =新的FileOutputStream(mFileTemp);
                copyStream(InputStream的,FileOutputStream中);
                fileOutputStream.close();
                inputStream.close();

                startCropImage();

            }赶上(例外五){

                Log.e(TAG,错误而创建的临时文件,E);
            }

            打破;
        案例REQUEST_ code_TAKE_PICTURE:

            startCropImage();
            打破;
        案例REQUEST_ code_CROP_IMAGE:

            字符串路径= data.getStringExtra(CropImage.IMAGE_PATH);
            如果(路径== NULL){

                返回;
            }

            // byte []的IDATA = path.getBytes();
            位图图片= BitmapFactory.de codeFILE(路径);
            ByteArrayOutputStream流=新ByteArrayOutputStream();
            picture.com preSS(Bitmap.Com pressFormat.JPEG,100,流);
            //获取字节数组在这里
            byte []的IDATA = stream.toByteArray();

            文件=新ParseFile(photo.jpg,IDATA);
            file.saveInBackground();

            位= BitmapFactory.de codeFILE(mFileTemp.getPath());

            mImageView.setImageBitmap(位);
            button.setVisibility(View.VISIBLE);
            打破;
    }
    super.onActivityResult(要求code,因此code,数据);
}





公共静态无效copyStream(输入的InputStream,OutputStream的输出)
        抛出IOException异常{

    byte []的缓冲区=新的字节[1024];
    INT读取动作;
    而((读取动作= input.read(缓冲液))!=  -  1){
        output.write(缓冲液,0,读取动作);
    }
}

}
 

清单

 <活动
        机器人:名称=trade.ly.tradely.PostPhotosActivity
        机器人:标签=@字符串/ title_activity_post_photos>
    < /活性GT;
 
Android 币种转换App

的片段正在创建的onClick班级活动

 公共类PostActivity扩展FragmentActivity工具
PageFragmentCallbacks,ReviewFragment.Callbacks,ModelCallbacks {
    私人ViewPager mPager;
    私人MyPagerAdapter mPagerAdapter;

    私人布尔mEditingAfterReview;

    私人AbstractWizardModel mWizardModel =新SandwichWizardModel(本);

    私人布尔mConsumePageSelectedEvent;

    私人按钮mNextButton;
    私人按钮M prevButton;
    字符串用户名;
    字符串uemail;

    私人名单,其中,第> mCurrentPageSequence;
    私人StepPagerStrip mStepPagerStrip;

    公共静态最终字符串变量=PostActivity;
    双纬度,经度;

    公共无效的onCreate(包savedInstanceState){


        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_post);

        捆绑额外= getIntent()getExtras()。
        如果(临时演员!= NULL){
        //获取结果
        用户名= extras.getString(姓名);
        uemail = extras.getString(电子邮件);
        }

        捆绑数据=新包();
        如果(!TextUtils.isEmpty(CustomerInfoPage.EMAIL_DATA_KEY)){
           data.putString(CustomerInfoPage.EMAIL_DATA_KEY,uemail);
           mWizardModel.findByKey(您的信息)resetData(数据)。
     }

        GpsLocationTracker mGpsLocationTracker =新GpsLocationTracker(PostActivity.this);


        //设置GPS定位获取地址

       如果(mGpsLocationTracker.canGetLocation())
       {
           纬度= mGpsLocationTracker.getLatitude();
           经度= mGpsLocationTracker.getLongitude();
           Log.i(TAG,的String.Format(纬度:%S,纬度));
           Log.i(TAG,的String.Format(经度:%S,经度));

       }
       其他
       {
           mGpsLocationTracker.showSettingsAlert();
       }

        如果(savedInstanceState!= NULL){
            mWizardModel.load(savedInstanceState.getBundle(模型));
        }

        mWizardModel.registerListener(本);

        mPagerAdapter =新MyPagerAdapter(getSupportFragmentManager());
        mPager =(ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mPagerAdapter);
        mStepPagerStrip =(StepPagerStrip)findViewById(R.id.strip);
        mStepPagerStrip.setOnPageSelectedListener(新StepPagerStrip.OnPageSelectedListener(){
            @覆盖
            公共无效onPageStripSelected(INT位置){
                位置= Math.min(mPagerAdapter.getCount() -  1,位置);
                如果(mPager.getCurrentItem()!=位置){
                    mPager.setCurrentItem(位置);
                }
            }
        });

        mNextButton =(按钮)findViewById(R.id.next_button);
        米prevButton =(按钮)findViewById(R.id. prev_button);

        mPager.setOnPageChangeListener(新ViewPager.SimpleOnPageChangeListener(){
            @覆盖
            公共无效onPageSelected(INT位置){
                mStepPagerStrip.setCurrentPage(位置);

                如果(mConsumePageSelectedEvent){
                    mConsumePageSelectedEvent = FALSE;
                    返回;
                }

                mEditingAfterReview = FALSE;
                updateBottomBar();
            }
        });

        mNextButton.setOnClickListener(新View.OnClickListener(){
            @燮pressLint(ValidFragment)
            @覆盖
            公共无效的onClick(视图查看){

                如果(mPager.getCurrentItem()== mCurrentPageSequence.size()){


                    DialogFragment DG =新DialogFragment(){
                        @覆盖
                        公共对话onCreateDialog(包savedInstanceState){
                            返回新AlertDialog.Builder(getActivity())
                                    .setMessage(R.string.submit_confirm_message)
                                    .setPositiveButton(
                                            R.string.submit_confirm_button,
                                            新DialogInterface.OnClickListener(){
                                                公共无效的onClick(
                                                        DialogInterface对话框,
                                                        INT编号){

                                                    字符串标题= mWizardModel
                                                            .findByKey(
                                                                    邮报信息)
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.TITLE_DATA_KEY);

                                                    串价格= mWizardModel
                                                            .findByKey(
                                                                    邮报信息)
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.PRICE_DATA_KEY);

                                                    字符串描述= mWizardModel
                                                            .findByKey(
                                                                    邮报信息)
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.DESCRIPTION_DATA_KEY);

                                                    字符串maincat = mWizardModel
                                                            .findByKey(
                                                                    主目录)
                                                            .getData()
                                                            .getString(
                                                                    Page.SIMPLE_DATA_KEY);

                                                    字符串subcat = mWizardModel
                                                            .findByKey(
                                                                    子类别)
                                                            .getData()
                                                            .getString(
                                                                    Page.SIMPLE_DATA_KEY);

                                                    字符串PNAME = mWizardModel
                                                            .findByKey(
                                                                    您的信息)
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.NAME_DATA_KEY);

                                                    字符串pemail = mWizardModel
                                                            .findByKey(
                                                                    您的信息)
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.EMAIL_DATA_KEY);

                                                    字符串pphone = mWizardModel
                                                            .findByKey(
                                                                    您的信息)
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.PHONE_DATA_KEY);

                                                    字符串pmeet = mWizardModel
                                                            .findByKey(
                                                                    您的信息)
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.MEET_DATA_KEY);

                                                    意图I =新的意图(
                                                            PostActivity.this,
                                                            PostPhotosActivity.class);
                                                    i.putExtra(标题,标题);
                                                    i.putExtra(价格,价格);
                                                    i.putExtra(说明,
                                                            描述);
                                                    i.putExtra(MAINCAT
                                                            maincat);
                                                    i.putExtra(SUBCAT,subcat);
                                                    i.putExtra(PNAME,PNAME);
                                                    i.putExtra(PEMAIL,pemail);
                                                    i.putExtra(PPHONE,pphone);
                                                    i.putExtra(PMEET,pmeet);
                                                    i.putExtra(土地增值税,纬度);
                                                    i.putExtra(长,经度);
                                                    startActivityForResult(ⅰ,0);

                                                }
                                            })
                                    .setNegativeButton(android.R.string.cancel,
                                            空).create();
                        }

                    };
                dg.show(getSupportFragmentManager(),place_order_dialog);
            } 其他 {
                    如果(mEditingAfterReview){
                        mPager.setCurrentItem(mPagerAdapter.getCount() -  1);
                    } 其他 {
                        mPager.setCurrentItem(mPager.getCurrentItem()+ 1);
                    }
                }

            }
        });

        米prevButton.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图查看){
                    mPager.setCurrentItem(mPager.getCurrentItem() -  1);
            }
    });

    onPageTreeChanged();
    updateBottomBar();
}

@覆盖
公共无效onPageTreeChanged(){
    mCurrentPageSequence = mWizardModel.getCurrentPageSequence();
    recalculateCutOffPage();
    mStepPagerStrip.setPageCount(mCurrentPageSequence.size()+ 1); // + 1 =
                                                                                                                                    // 评论
                                                                                                                                    // 步骤
    mPagerAdapter.notifyDataSetChanged();
    updateBottomBar();
}

私人无效updateBottomBar(){
    INT位置= mPager.getCurrentItem();
    如果(位置== mCurrentPageSequence.size()){
            mNextButton.setText(R.string.finish);
            mNextButton.setBackgroundResource(R.drawable.finish_background);
            mNextButton.setTextAppearance(这一点,R.style.TextAppearanceFinish);
    } 其他 {
            mNextButton.setText(mEditingAfterReview?R.string.review
                            :R.string.next);
            mNextButton
                            .setBackgroundResource(R.drawable.selectable_item_background);
            的TypedValue V =新的TypedValue();
            getTheme()。resolveAttribute(android.R.attr.textAppearanceMedium,V,
                            真正);
            mNextButton.setTextAppearance(这一点,v.resourceId);
            mNextButton.setEnabled(位置= mPagerAdapter.getCutOffPage()!);
    }

    米prevButton
                    .setVisibility(位置< = 0 View.INVISIBLE:View.VISIBLE);
}

@覆盖
保护无效的onDestroy(){
    super.onDestroy();
    mWizardModel.unregisterListener(本);
}

@覆盖
保护无效的onSaveInstanceState(包outState){
    super.onSaveInstanceState(outState);
    outState.putBundle(模式,mWizardModel.save());
}

@覆盖
公共AbstractWizardModel onGetModel(){
    返回mWizardModel;
}

@覆盖
公共无效onEditScreenAfterReview(字符串键){
    的for(int i = mCurrentPageSequence.size() -  1; I> = 0;我 - ){
            如果(mCurrentPageSequence.get(我).getKey()。等于(键)){
                    mConsumePageSelectedEvent =真;
                    mEditingAfterReview = TRUE;
                    mPager.setCurrentItem(ⅰ);
                    updateBottomBar();
                    打破;
            }
    }
}

@覆盖
公共无效onPageDataChanged(页){
    如果(page.isRequired()){
            如果(recalculateCutOffPage()){
                    mPagerAdapter.notifyDataSetChanged();
                    updateBottomBar();
            }
    }
}

@覆盖
公共页面onGetPage(字符串键){
    返回mWizardModel.findByKey(键);
}

私人布尔recalculateCutOffPage(){
    //切断寻呼机适配器在未完成第一页所需
    INT cutOffPage = mCurrentPageSequence.size()+ 1;
    的for(int i = 0; I< mCurrentPageSequence.size();我++){
            页= mCurrentPageSequence.get(我);
            如果(page.isRequired()&安培;&安培;!page.isCompleted()){
                    cutOffPage =我;
                    打破;
            }
    }

    如果(mPagerAdapter.getCutOffPage()!= cutOffPage){
            mPagerAdapter.setCutOffPage(cutOffPage);
            返回true;
    }

    返回false;
}

公共类MyPagerAdapter扩展FragmentStatePagerAdapter {
    私人诠释mCutOffPage;
    私人片段mPrimaryItem;

    公共MyPagerAdapter(FragmentManager FM){
            超(FM);
    }

    @覆盖
    公共片段的getItem(int i)以{
            如果(ⅰ> = mCurrentPageSequence.size()){
                    返回新ReviewFragment();
            }

            返回mCurrentPageSequence.get(ⅰ).createFragment();
    }

    @覆盖
    公众诠释getItemPosition(Object对象){
            // TODO:更聪明这个
            如果(对象== mPrimaryItem){
                    //重新使用当前片段(其位置不会改变)
                    返回POSITION_UNCHANGED;
            }

            返回POSITION_NONE;
    }

    @覆盖
    公共无效setPrimaryItem(ViewGroup中的容器,INT位置,
                    Object对象){
            super.setPrimaryItem(集装箱,位置,对象);
            mPrimaryItem =(片段)的对象;
    }

    @覆盖
    公众诠释getCount将(){
            返回Math.min(mCutOffPage + 1,mCurrentPageSequence == NULL?1
                            :mCurrentPageSequence.size()+ 1);
    }

    公共无效setCutOffPage(INT cutOffPage){
            如果(cutOffPage℃,){
                    cutOffPage = Integer.MAX_VALUE的;
            }
            mCutOffPage = cutOffPage;
    }

    公众诠释getCutOffPage(){
            返回mCutOffPage;
    }

    }
}
 

解决方案

您无法使用 PostPhotosActivity 的活动,因为它不是一项活动。它是碎片,因为它扩展片段不是活动。有了这个在你的清单是对意图的错误,并呼吁startActivityForResult

 意向书我=新的意图(
PostActivity.this,
PostPhotosActivity.class);
 

导致异常铸造,因为片段只是不能被强制转换为活动

您可以使用XML布局与此片段在其他一些活动或改变片段的活性。 XML的布局为例:

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:方向=横向
    机器人:layout_width =match_parent机器人:layout_height =match_parent>

    <片段类=com.example.PostPhotosFragment
            机器人:ID =@ + ID / post_photos_fragment
            机器人:layout_width =match_parent机器人:layout_height =match_parent/>


< / LinearLayout中>
 

,然后在一些活动延伸活动高级应召的setContentView(R.layout.yourlayout)和你的片段将您的活动创建。

I know this question has been asked before but they haven't been in the same situation I'm in.

My problem I need to have my PostPhotosActivity class retainInstance. The way I'm doing that is turning it into a fragment. Unfortunately I'm always getting this error.

   12-13 14:38:55.669: E/AndroidRuntime(30234): FATAL EXCEPTION: main

12-13 14:38:55.669: E/AndroidRuntime(30234): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{trade.ly.tradely/trade.ly.tradely.PostPhotosActivity}: java.lang.ClassCastException: trade.ly.tradely.PostPhotosActivity cannot be cast to android.app.Activity

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.access$600(ActivityThread.java:141)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.os.Handler.dispatchMessage(Handler.java:99)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.os.Looper.loop(Looper.java:137)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.main(ActivityThread.java:5039)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at java.lang.reflect.Method.invokeNative(Native Method)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at java.lang.reflect.Method.invoke(Method.java:511)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at dalvik.system.NativeStart.main(Native Method)

12-13 14:38:55.669: E/AndroidRuntime(30234): Caused by: java.lang.ClassCastException: trade.ly.tradely.PostPhotosActivity cannot be cast to android.app.Activity

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.Instrumentation.newActivity(Instrumentation.java:1054)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)

12-13 14:38:55.669: E/AndroidRuntime(30234): ... 11 more

Here is the PostPhotosActivity that's making all the errors.

public class PostPhotosActivity extends android.app.Fragment {

public static final String TAG = "PostPhotosActivity";

String title, price, description, maincat, subcat, pname, pemail, pphone, pmeet, imageUri;

public static final String TEMP_PHOTO_FILE_NAME = "temp_photo.jpg";

public static final int REQUEST_CODE_GALLERY      = 0x1;
public static final int REQUEST_CODE_TAKE_PICTURE = 0x2;
public static final int REQUEST_CODE_CROP_IMAGE   = 0x3;
private ImageView mImageView;
private File      mFileTemp;
ParseFile file;
double latitude;
final String[] items = new String[] { "Take from camera", "Select from gallery" };

double longitude;
Button button;



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {


     View view = inflater.inflate(R.layout.activity_post_photos, container,false);


     Bundle extras= getActivity().getIntent().getExtras();
     if(extras!=null)
     {
        title = extras.getString("TITLE"); // get the value based on the key
        price = extras.getString("PRICE"); // get the value based on the key 
        description = extras.getString("DESCRIPTION"); // get the value based on the key
        maincat = extras.getString("MAINCAT"); // get the value based on the key 
        subcat = extras.getString("SUBCAT"); // get the value based on the key
        pname = extras.getString("PNAME"); // get the value based on the key 
        pemail = extras.getString("PEMAIL"); // get the value based on the key
        pphone = extras.getString("PPHONE"); // get the value based on the key 
        pmeet = extras.getString("PMEET"); // get the value based on the key
        latitude = extras.getDouble("lat");
        longitude = extras.getDouble("long");
    }  



Button newPost = (Button)view.findViewById(R.id.post_data);
newPost.setVisibility(View.INVISIBLE);

newPost.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Perform action on click

        ParseGeoPoint point = new ParseGeoPoint(latitude, longitude);
        ParseObject setPost = new ParseObject("Posts");

        // Create an author relationship with the current user
        setPost.put("author", ParseUser.getCurrentUser());

        // Get location

        setPost.put("location", point);
        setPost.put("Title", title);
        setPost.put("Price", price);
        setPost.put("Description", description);
        setPost.put("MainCat", maincat);
        setPost.put("SubCat", subcat);
        setPost.put("PName", pname);
        setPost.put("PEmail", pemail);
        setPost.put("PPhone", pphone);
        setPost.put("PMeet", pmeet);
        setPost.put("Photo", file);

        setPost.saveInBackground();

        Intent intent = new Intent(getActivity(), Flow.class);
       startActivity(intent);
    }
});



    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_item, items);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle("Select Image");
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) { // pick from
                                                                // camera
            if (item == 0) {

                takePicture();

            } else { // pick from file

                openGallery();

            }
        }
    });

    final AlertDialog dialog = builder.create();

    mImageView = (ImageView) view.findViewById(R.id.iv_photo);
    mImageView.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

            dialog.show();
        }
    });



        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
                mFileTemp = new File(Environment.getExternalStorageDirectory(), TEMP_PHOTO_FILE_NAME);
        }
        else {
                mFileTemp = new File(getActivity().getFilesDir(), TEMP_PHOTO_FILE_NAME);
        }
        setRetainInstance(true);
        return view;

}

private void takePicture() {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    try {
            Uri mImageCaptureUri = null;
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) {
                    mImageCaptureUri = Uri.fromFile(mFileTemp);
            }
            else {
                    /*
                     * The solution is taken from here: http://stackoverflow.com/questions/10042695/how-to-get-camera-result-as-a-uri-in-data-folder
                     */
                    mImageCaptureUri = InternalStorageContentProvider.CONTENT_URI;
            }        
        intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);
    } catch (ActivityNotFoundException e) {

        Log.d(TAG, "cannot take picture", e);
    }
}

private void openGallery() {

    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, REQUEST_CODE_GALLERY);
}

private void startCropImage() {

    Intent intent = new Intent(getActivity(), CropImage.class);
    intent.putExtra(CropImage.IMAGE_PATH, mFileTemp.getPath());
    intent.putExtra(CropImage.SCALE, true);

    intent.putExtra(CropImage.ASPECT_X, 1);
    intent.putExtra(CropImage.ASPECT_Y, 1);

    startActivityForResult(intent, REQUEST_CODE_CROP_IMAGE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode != Activity.RESULT_OK) {

        return;
    }

    Bitmap bitmap;

    switch (requestCode) {

        case REQUEST_CODE_GALLERY:

            try {

                InputStream inputStream = getActivity().getContentResolver().openInputStream(data.getData());
                FileOutputStream fileOutputStream = new FileOutputStream(mFileTemp);
                copyStream(inputStream, fileOutputStream);
                fileOutputStream.close();
                inputStream.close();

                startCropImage();

            } catch (Exception e) {

                Log.e(TAG, "Error while creating temp file", e);
            }

            break;
        case REQUEST_CODE_TAKE_PICTURE:

            startCropImage();
            break;
        case REQUEST_CODE_CROP_IMAGE:

            String path = data.getStringExtra(CropImage.IMAGE_PATH);
            if (path == null) {

                return;
            }

            //byte[] idata = path.getBytes();
            Bitmap picture = BitmapFactory.decodeFile(path);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            picture.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            // get byte array here
            byte[] idata= stream.toByteArray();

            file = new ParseFile("photo.jpg", idata);
            file.saveInBackground();

            bitmap = BitmapFactory.decodeFile(mFileTemp.getPath());

            mImageView.setImageBitmap(bitmap);
            button.setVisibility(View.VISIBLE);
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}





public static void copyStream(InputStream input, OutputStream output)
        throws IOException {

    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = input.read(buffer)) != -1) {
        output.write(buffer, 0, bytesRead);
    }
}

}

Manifest

 <activity
        android:name="trade.ly.tradely.PostPhotosActivity"
        android:label="@string/title_activity_post_photos">
    </activity>

Class Activity where the fragment is being created onClick

    public class PostActivity extends FragmentActivity implements
PageFragmentCallbacks, ReviewFragment.Callbacks, ModelCallbacks {
    private ViewPager mPager;
    private MyPagerAdapter mPagerAdapter;

    private boolean mEditingAfterReview;

    private AbstractWizardModel mWizardModel = new SandwichWizardModel(this);

    private boolean mConsumePageSelectedEvent;

    private Button mNextButton;
    private Button mPrevButton;
    String user_name;
    String uemail;

    private List<Page> mCurrentPageSequence;
    private StepPagerStrip mStepPagerStrip;

    public static final String TAG = "PostActivity";
    double latitude, longitude;

    public void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_post);

        Bundle extras = getIntent().getExtras();
        if(extras !=null) {
        // Get the results
        user_name = extras.getString("name");
        uemail = extras.getString("email");
        }   

        Bundle data = new Bundle();
        if (!TextUtils.isEmpty(CustomerInfoPage.EMAIL_DATA_KEY)) {
           data.putString(CustomerInfoPage.EMAIL_DATA_KEY, uemail);
           mWizardModel.findByKey("Your Info").resetData(data);
     }

        GpsLocationTracker mGpsLocationTracker = new GpsLocationTracker(PostActivity.this);


        // Set GPS Location fetched address

       if (mGpsLocationTracker.canGetLocation()) 
       {
           latitude = mGpsLocationTracker.getLatitude();
           longitude = mGpsLocationTracker.getLongitude();
           Log.i(TAG, String.format("latitude: %s", latitude));
           Log.i(TAG, String.format("longitude: %s", longitude));

       } 
       else 
       {
           mGpsLocationTracker.showSettingsAlert();
       }

        if (savedInstanceState != null) {
            mWizardModel.load(savedInstanceState.getBundle("model"));
        }

        mWizardModel.registerListener(this);

        mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
        mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setAdapter(mPagerAdapter);
        mStepPagerStrip = (StepPagerStrip) findViewById(R.id.strip);
        mStepPagerStrip.setOnPageSelectedListener(new StepPagerStrip.OnPageSelectedListener() {
            @Override
            public void onPageStripSelected(int position) {
                position = Math.min(mPagerAdapter.getCount() - 1, position);
                if (mPager.getCurrentItem() != position) {
                    mPager.setCurrentItem(position);
                }
            }
        });

        mNextButton = (Button) findViewById(R.id.next_button);
        mPrevButton = (Button) findViewById(R.id.prev_button);

        mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                mStepPagerStrip.setCurrentPage(position);

                if (mConsumePageSelectedEvent) {
                    mConsumePageSelectedEvent = false;
                    return;
                }

                mEditingAfterReview = false;
                updateBottomBar();
            }
        });

        mNextButton.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("ValidFragment")
            @Override
            public void onClick(View view) {

                if (mPager.getCurrentItem() == mCurrentPageSequence.size()) {


                    DialogFragment dg = new DialogFragment() {
                        @Override
                        public Dialog onCreateDialog(Bundle savedInstanceState) {
                            return new AlertDialog.Builder(getActivity())
                                    .setMessage(R.string.submit_confirm_message)
                                    .setPositiveButton(
                                            R.string.submit_confirm_button,
                                            new DialogInterface.OnClickListener() {
                                                public void onClick(
                                                        DialogInterface dialog,
                                                        int id) {

                                                    String title = mWizardModel
                                                            .findByKey(
                                                                    "Post Info")
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.TITLE_DATA_KEY);

                                                    String price = mWizardModel
                                                            .findByKey(
                                                                    "Post Info")
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.PRICE_DATA_KEY);

                                                    String description = mWizardModel
                                                            .findByKey(
                                                                    "Post Info")
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.DESCRIPTION_DATA_KEY);

                                                    String maincat = mWizardModel
                                                            .findByKey(
                                                                    "Main Category")
                                                            .getData()
                                                            .getString(
                                                                    Page.SIMPLE_DATA_KEY);

                                                    String subcat = mWizardModel
                                                            .findByKey(
                                                                    "Sub Category")
                                                            .getData()
                                                            .getString(
                                                                    Page.SIMPLE_DATA_KEY);

                                                    String pname = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.NAME_DATA_KEY);

                                                    String pemail = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.EMAIL_DATA_KEY);

                                                    String pphone = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.PHONE_DATA_KEY);

                                                    String pmeet = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.MEET_DATA_KEY);

                                                    Intent i = new Intent(
                                                            PostActivity.this,
                                                            PostPhotosActivity.class);
                                                    i.putExtra("TITLE", title);
                                                    i.putExtra("PRICE", price);
                                                    i.putExtra("DESCRIPTION",
                                                            description);
                                                    i.putExtra("MAINCAT",
                                                            maincat);
                                                    i.putExtra("SUBCAT", subcat);
                                                    i.putExtra("PNAME", pname);
                                                    i.putExtra("PEMAIL", pemail);
                                                    i.putExtra("PPHONE", pphone);
                                                    i.putExtra("PMEET", pmeet);
                                                    i.putExtra("lat", latitude);
                                                    i.putExtra("long", longitude);
                                                    startActivityForResult(i, 0);

                                                }
                                            })
                                    .setNegativeButton(android.R.string.cancel,
                                            null).create();
                        }

                    };
                dg.show(getSupportFragmentManager(), "place_order_dialog");
            } else {
                    if (mEditingAfterReview) {
                        mPager.setCurrentItem(mPagerAdapter.getCount() - 1);
                    } else {
                        mPager.setCurrentItem(mPager.getCurrentItem() + 1);
                    }
                }

            }
        });

        mPrevButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    mPager.setCurrentItem(mPager.getCurrentItem() - 1);
            }
    });

    onPageTreeChanged();
    updateBottomBar();
}

@Override
public void onPageTreeChanged() {
    mCurrentPageSequence = mWizardModel.getCurrentPageSequence();
    recalculateCutOffPage();
    mStepPagerStrip.setPageCount(mCurrentPageSequence.size() + 1); // + 1 =
                                                                                                                                    // review
                                                                                                                                    // step
    mPagerAdapter.notifyDataSetChanged();
    updateBottomBar();
}

private void updateBottomBar() {
    int position = mPager.getCurrentItem();
    if (position == mCurrentPageSequence.size()) {
            mNextButton.setText(R.string.finish);
            mNextButton.setBackgroundResource(R.drawable.finish_background);
            mNextButton.setTextAppearance(this, R.style.TextAppearanceFinish);
    } else {
            mNextButton.setText(mEditingAfterReview ? R.string.review
                            : R.string.next);
            mNextButton
                            .setBackgroundResource(R.drawable.selectable_item_background);
            TypedValue v = new TypedValue();
            getTheme().resolveAttribute(android.R.attr.textAppearanceMedium, v,
                            true);
            mNextButton.setTextAppearance(this, v.resourceId);
            mNextButton.setEnabled(position != mPagerAdapter.getCutOffPage());
    }

    mPrevButton
                    .setVisibility(position <= 0 ? View.INVISIBLE : View.VISIBLE);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mWizardModel.unregisterListener(this);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBundle("model", mWizardModel.save());
}

@Override
public AbstractWizardModel onGetModel() {
    return mWizardModel;
}

@Override
public void onEditScreenAfterReview(String key) {
    for (int i = mCurrentPageSequence.size() - 1; i >= 0; i--) {
            if (mCurrentPageSequence.get(i).getKey().equals(key)) {
                    mConsumePageSelectedEvent = true;
                    mEditingAfterReview = true;
                    mPager.setCurrentItem(i);
                    updateBottomBar();
                    break;
            }
    }
}

@Override
public void onPageDataChanged(Page page) {
    if (page.isRequired()) {
            if (recalculateCutOffPage()) {
                    mPagerAdapter.notifyDataSetChanged();
                    updateBottomBar();
            }
    }
}

@Override
public Page onGetPage(String key) {
    return mWizardModel.findByKey(key);
}

private boolean recalculateCutOffPage() {
    // Cut off the pager adapter at first required page that isn't completed
    int cutOffPage = mCurrentPageSequence.size() + 1;
    for (int i = 0; i < mCurrentPageSequence.size(); i++) {
            Page page = mCurrentPageSequence.get(i);
            if (page.isRequired() && !page.isCompleted()) {
                    cutOffPage = i;
                    break;
            }
    }

    if (mPagerAdapter.getCutOffPage() != cutOffPage) {
            mPagerAdapter.setCutOffPage(cutOffPage);
            return true;
    }

    return false;
}

public class MyPagerAdapter extends FragmentStatePagerAdapter {
    private int mCutOffPage;
    private Fragment mPrimaryItem;

    public MyPagerAdapter(FragmentManager fm) {
            super(fm);
    }

    @Override
    public Fragment getItem(int i) {
            if (i >= mCurrentPageSequence.size()) {
                    return new ReviewFragment();
            }

            return mCurrentPageSequence.get(i).createFragment();
    }

    @Override
    public int getItemPosition(Object object) {
            // TODO: be smarter about this
            if (object == mPrimaryItem) {
                    // Re-use the current fragment (its position never changes)
                    return POSITION_UNCHANGED;
            }

            return POSITION_NONE;
    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position,
                    Object object) {
            super.setPrimaryItem(container, position, object);
            mPrimaryItem = (Fragment) object;
    }

    @Override
    public int getCount() {
            return Math.min(mCutOffPage + 1, mCurrentPageSequence == null ? 1
                            : mCurrentPageSequence.size() + 1);
    }

    public void setCutOffPage(int cutOffPage) {
            if (cutOffPage < 0) {
                    cutOffPage = Integer.MAX_VALUE;
            }
            mCutOffPage = cutOffPage;
    }

    public int getCutOffPage() {
            return mCutOffPage;
    }

    }
}

解决方案

You cannot use PostPhotosActivity as activity because it is not an activity. It is fragment because it extends Fragment not Activity. Having this in your manifest is a mistake and calling startActivityForResult on intent

Intent i = new Intent(
PostActivity.this,
PostPhotosActivity.class);

causes the exception in casting because Fragment just cannot be casted to Activity.

You could use xml layout with this fragment in some other activity or change the fragment to activity. Example of xml layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <fragment class="com.example.PostPhotosFragment"
            android:id="@+id/post_photos_fragment"
            android:layout_width="match_parent" android:layout_height="match_parent" />


</LinearLayout>

and then in some activity which extends Activity class call setContentView(R.layout.yourlayout) and your fragment will be created in your activity.

 
精彩推荐
图片推荐