如何解析ClassCastException:java.lang.String不能被强制转换为异常

如何解析ClassCastException:java.lang.String不能被强制转换为异常,java,android,string,list,classcastexception,Java,Android,String,List,Classcastexception,我需要帮助。我有两种分享偏好的方法。它们是getList和setList 这是setList() 总共有19个值。 但是当我在fragment类中将值强制转换到recylerView的bindHolder时,我得到一个错误是 java.lang.ClassCastException: java.lang.String cannot be cast to com.example.lscodex.ddddd.Model.tcmb 这是来自片段的异步任务 private class Download

我需要帮助。我有两种分享偏好的方法。它们是getList和setList

这是setList()

总共有19个值。 但是当我在fragment类中将值强制转换到recylerView的bindHolder时,我得到一个错误是

java.lang.ClassCastException: java.lang.String cannot be cast to com.example.lscodex.ddddd.Model.tcmb
这是来自片段的异步任务

private class DownloadXmlTask extends AsyncTask<Void, Integer, List<tcmb>> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected List<tcmb> doInBackground(Void... voids) {

           return SharedPreferenceValues.getList(getActivity());
        }

        @Override
        protected void onPostExecute(List<tcmb> tcmb) {
            if (tcmb.size() == 0) {

                mtcmbList = tcmb;
                setupAdapter();

                mRecyclerViewAnim.runLayoutAnimation(getContext(), mRecyclerView);
                mProgressBar.setVisibility(View.INVISIBLE);

            } else if (mRecyclerView != null) {

                mtcmbList.addAll(tcmb);
                Log.d(TAG, "onPostExecute: " + mtcmbList.size());
                mRecyclerView.getAdapter().notifyDataSetChanged();
                dateUpdate();

                mRecyclerViewAnim.runLayoutAnimation(getContext(), mRecyclerView);
                mProgressBar.setVisibility(View.INVISIBLE);
                mSwipeRefreshLayout.setRefreshing(false);
            }
        }

    }
我不知道为什么

编辑

我尝试使用共享的首选项,从初始屏幕获取XML列表数据,并将其导入到其他活动中

 private class splashTask extends AsyncTask<Void, Integer, List<tcmb>> {

        private Activity mContext;

        public splashTask(Activity c){
            this.mContext = c;
        }


        @Override
        protected void onPreExecute() {
            mSplashProgressBar.setProgress(0);
        }

        @Override
        protected List<tcmbDoviz> doInBackground(Void... voids) {
            List<tcmb> tcmbList =  new ConnectionXmlParser().getXmlFile(getApplicationContext());
            try {


                int getvalues = ConnectionXmlParser.howLong();
                Log.d(TAG, "doInBackground: " +getvalues);
                for (int i=0;i<getvalues;i++){
                    Log.d(TAG, "doInBackground: " +i);
                    publishProgress(((int)i*100)/getvalues);

                    Log.d(TAG, "Publishing "  + ((int)i*100/getvalues));

                }
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return tcmbList;
        }

        @Override
        protected void onPostExecute(List<tcmbDoviz> list) {
            mtcmbList.addAll(list);

            SharedPreferenceValues.setValuesList(getApplication(),mtcmbList);
            splashScreen();
            mSplashProgressBar.setVisibility(View.GONE);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            mSplashProgressBar.setProgress(values[0]);
            super.onProgressUpdate(values);
        }
私有类splashTask扩展了AsyncTask{
私人活动mContext;
公共服务任务(活动c){
this.mContext=c;
}
@凌驾
受保护的void onPreExecute(){
mSplashProgressBar.setProgress(0);
}
@凌驾
受保护列表背景(无效…无效){
List tcmbList=newconnectionxmlparser().getXmlFile(getApplicationContext());
试一试{
int getvalues=ConnectionXmlParser.howLong();
Log.d(标记“doInBackground:+getvalues”);

对于(int i=0;i您正试图将
List
更改为
List
,问题就在这里

public static List<tcmb> getList(Activity a){

    // your code
    // 

    List<String> itemList = new ArrayList<String>();
    itemList.addAll(Arrays.asList(itemWords));
    dovizList = (List)itemsList;
    Log.d(TAG, "getValuestcmb: " + dovizList.size());

    return dovizList;
我发现了怎么做

在splashscreen.activity中保存具有共享首选项的XML列表对象

 public static void setValues(Context context, List<tcmb> curProduct){
        Gson gson = new Gson();
        String jsonCurProduct = gson.toJson(curProduct);

        SharedPreferences sharedPref = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();

        editor.putString("dd", jsonCurProduct);
        editor.apply();
        Log.d(TAG, "setValues: " + jsonCurProduct);
    }
publicstaticvoidsetvalues(上下文、列表和产品){
Gson Gson=新的Gson();
字符串jsonCurProduct=gson.toJson(curProduct);
SharedReferences SharedReferences=context.getSharedReferences(“Prefs”,context.MODE\u PRIVATE);
SharedPreferences.Editor=sharedPref.edit();
putString(“dd”,jsonCurProduct);
editor.apply();
Log.d(标记“setValues:+jsonCurProduct”);
}
然后,获取片段中具有共享首选项的列表对象

public static List<tcmb> getValuesAltın(Context context){
        Gson gson = new Gson();
        List<tcmbDoviz> productFromShared = new ArrayList<>();
        SharedPreferences sharedPref = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE);
        String jsonPreferences = sharedPref.getString("dd", "");

        Type type = new TypeToken<List<tcmb>>() {}.getType();
        productFromShared = gson.fromJson(jsonPreferences, type);

        return productFromShared;
    }
public静态列表getValuesAltın(上下文){
Gson Gson=新的Gson();
List productFromShared=new ArrayList();
SharedReferences SharedReferences=context.getSharedReferences(“Prefs”,context.MODE\u PRIVATE);
String jsonPreferences=sharedPref.getString(“dd”,“”);
Type Type=new-TypeToken(){}.getType();
productFromShared=gson.fromJson(jsonPreferences,type);
从共享中返回产品;
}

最后,谢谢你,拉维。

我打错了你不懂的那行,很抱歉。我编辑了,但谢谢你的帮助。@lscodex我没听懂你的话??你能具体说说你在说什么吗?哪行?这行->列表项列表=新数组列表();我写了两次。我不知道确切情况,但我取了列表的值,我在logcat上看到。这些值​​我从列表中得到的是setValues中的字符串值。我正在将它们传输到getValuesList()中的tcmb对象列表。@lscodex没有这样的方法,你的意思是
getValuesList
?不,该方法不传输任何内容。
 private class splashTask extends AsyncTask<Void, Integer, List<tcmb>> {

        private Activity mContext;

        public splashTask(Activity c){
            this.mContext = c;
        }


        @Override
        protected void onPreExecute() {
            mSplashProgressBar.setProgress(0);
        }

        @Override
        protected List<tcmbDoviz> doInBackground(Void... voids) {
            List<tcmb> tcmbList =  new ConnectionXmlParser().getXmlFile(getApplicationContext());
            try {


                int getvalues = ConnectionXmlParser.howLong();
                Log.d(TAG, "doInBackground: " +getvalues);
                for (int i=0;i<getvalues;i++){
                    Log.d(TAG, "doInBackground: " +i);
                    publishProgress(((int)i*100)/getvalues);

                    Log.d(TAG, "Publishing "  + ((int)i*100/getvalues));

                }
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return tcmbList;
        }

        @Override
        protected void onPostExecute(List<tcmbDoviz> list) {
            mtcmbList.addAll(list);

            SharedPreferenceValues.setValuesList(getApplication(),mtcmbList);
            splashScreen();
            mSplashProgressBar.setVisibility(View.GONE);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            mSplashProgressBar.setProgress(values[0]);
            super.onProgressUpdate(values);
        }
public static List<tcmb> getList(Activity a){

    // your code
    // 

    List<String> itemList = new ArrayList<String>();
    itemList.addAll(Arrays.asList(itemWords));
    dovizList = (List)itemsList;
    Log.d(TAG, "getValuestcmb: " + dovizList.size());

    return dovizList;
List<String> itemsList = new ArrayList<String>();
dovizList = (List)itemsList;
List<String> itemsList = new ArrayList<String>();
List<tcmb> itemsList = new ArrayList<tcmb>();
dovizList = (List)itemsList;
 public static void setValues(Context context, List<tcmb> curProduct){
        Gson gson = new Gson();
        String jsonCurProduct = gson.toJson(curProduct);

        SharedPreferences sharedPref = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();

        editor.putString("dd", jsonCurProduct);
        editor.apply();
        Log.d(TAG, "setValues: " + jsonCurProduct);
    }
public static List<tcmb> getValuesAltın(Context context){
        Gson gson = new Gson();
        List<tcmbDoviz> productFromShared = new ArrayList<>();
        SharedPreferences sharedPref = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE);
        String jsonPreferences = sharedPref.getString("dd", "");

        Type type = new TypeToken<List<tcmb>>() {}.getType();
        productFromShared = gson.fromJson(jsonPreferences, type);

        return productFromShared;
    }