【问题标题】:Error casting android.support.v4.app.FragmentActivity$NonConfigurationInstances to my AsyncTask将 android.support.v4.app.FragmentActivity$NonConfigurationInstances 转换为我的 AsyncTask 时出错
【发布时间】:2015-10-17 08:10:39
【问题描述】:

我遇到了代码行问题:

mt=(MyTask)getLastNonConfigurationInstance();

mt 是 MyTask 类的实例

static class MyTask extends AsyncTask<String,Integer,Void>
    {
        MainActivity activity;
        void link (MainActivity act)
        {
            activity=act;
        }
        void unlink()
        {

            activity=null;
        }

        @Override
        protected Void doInBackground(String... params) {

            try{
                for(int i=1;i<=10;i++){
                    TimeUnit.SECONDS.sleep(1);
                    publishProgress(i);
                    Log.d("qwe", "i = " + i
                            + ", MyTask: " + this.hashCode()
                            + ", MainActivity: " + activity.hashCode());

                }
            }
            catch (InterruptedException ie)
            {
                ie.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            activity.tv.setText("i = "+values[0]);
        }
    }

我将它保存在 onRetainCustomNonConfigurationInstance 方法中

  @Override
    public Object onRetainCustomNonConfigurationInstance() {
        mt.unlink();
        return mt;
    }

当我尝试将值从配置实例传递到 mt 时出现错误,错误消息是

java.lang.ClassCastException: android.support.v4.app.FragmentActivity$NonConfigurationInstances 不能转换为 com.example.bermud06.p091_asynctaskdisplayrotate.MainActivity$MyTask

使用 API 级别 22 的 nexus 5 设备。

【问题讨论】:

  • 您是否尝试过使用getLastCustomNonConfigurationInstance(),如Docs 中指定的那样?
  • 成功了!非常感谢,PPartisan!
  • Np。我也写了它作为答案。

标签: java android types casting


【解决方案1】:

请改用getLastCustomNonConfigurationInstance()。来自FragmentActivity 的文档:

public Object onRetainCustomNonConfigurationInstance()

用这个代替onRetainNonConfigurationInstance()。稍后检索 getLastCustomNonConfigurationInstance()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多