簡體   English   中英

Android java.util.hashmap無法轉換為java.util.list

[英]Android java.util.hashmap cannot be cast to java.util.list

我正在嘗試從具有多個值的json檢索數據並將其轉換為列表視圖,但無法獲取錯誤java.util.hashmap不能轉換為java.util.list。

我在用凌空抽射。

FeedListActivity類:

 public void updateList() {
        feedListView= (ListView) findViewById(R.id.custom_list);
        feedListView.setVisibility(View.VISIBLE);
        progressbar.setVisibility(View.GONE);

        feedListView.setAdapter(new CustomListAdapter(this, feedList));
        feedListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                Object o = feedListView.getItemAtPosition(position);
                ClientesContatosModel newsData = (ClientesContatosModel) o;

                Intent intent = new Intent(FeedListActivity.this, FeedDetailsActivity.class);
                intent.putExtra("nome", newsData);
                startActivity(intent);
            }
        });
    }
 JSONArray dados = json.getJSONArray("dados");
            // parsing json object
            for (int i = 0; i < dados.length(); i++) {

                JSONObject item = dados.getJSONObject(i);

                feedList = new ArrayList<ClientesModel>();
                ClientesModel mClientesModel = new ClientesModel();
                ClientesContatosModel mClientesContatoModel = new ClientesContatosModel();

                /* cadastra os dados necessários no objeto no modelo */
                mClientesModel.setId(item.optInt("id"));
                mClientesModel.setNome(item.optString("nome"));
                mClientesModel.setTipo_pessoa(item.optString("tipo_pessoa"));
                mClientesModel.setInformacoes_adicionais(item.optString("informacoes_adicionais"));
                mClientesModel.setCpf(item.optString("cpf"));
                mClientesModel.setCnpj(item.optString("cnpj"));
                JSONArray contatos = item.getJSONArray("contatos");
                for (int j = 0; j < contatos.length(); j++) {
                    JSONObject data = contatos.getJSONObject(j);

                    mClientesContatoModel.setNome(data.optString("nome"));
                    mClientesContatoModel.setCargo(data.optString("cargo"));

FeedDetailsActivity類:

public class FeedDetailsActivity extends Activity {

    private ClientesContatosModel feed;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed_details);

        feed = (ClientesContatosModel) this.getIntent().getSerializableExtra("nome");

        if (null != feed) {


            TextView title = (TextView) findViewById(R.id.title);
            title.setText(feed.getNome());


        }
    }

這是日志:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.javatechig.feedreader/com.javatechig.feedreader.FeedDetailsActivity}: java.lang.ClassCastException: java.util.HashMap cannot be cast to com.javatechig.feedreader.model.ClientesContatosModel
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
                at android.app.ActivityThread.access$800(ActivityThread.java:139)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5086)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                at dalvik.system.NativeStart.main(Native Method)


Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to com.javatechig.feedreader.model.ClientesContatosModel
                at com.javatechig.feedreader.FeedDetailsActivity.onCreate(FeedDetailsActivity.java:26)
                at android.app.Activity.performCreate(Activity.java:5248)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
                at android.app.ActivityThread.access$800(ActivityThread.java:139)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5086)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)

因為HashMap#values()返回一個java.util.Collection,並且您不能將Collection轉換為ArrayList,所以您會得到ClassCastException。

與ArrayList(HashMap.values())一樣,ArrayList構造函數將Collection作為參數。 因此,當您將HashMap.values()作為ArrayList的參數傳遞時,您將不會獲得ClassCastException。

HashMap#values():請問自己,檢查源代碼中的返回類型,是否可以將java.util.Collection強制轉換為java.util.ArrayList? 沒有

 public Collection<V> values() {
921         Collection<V> vs = values;
922         return (vs != null ? vs : (values = new Values()));
923     }

ArrayList(Collection):檢查源中的參數類型。 參數為父類型的方法可以接受子類型嗎?

public ArrayList(Collection<? extends E> c) {
151         elementData = c.toArray();
152         size = elementData.length; 
153         // c.toArray might (incorrectly) not return Object[] (see 6260652)
154         if (elementData.getClass() != Object[].class)
155             elementData = Arrays.copyOf(elementData, size, Object[].class);
156     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM