2017-03-08 70 views
-1

我从两个文本字段获取用户输入并将它们存储到哈希映射中。我已经检查过这些值是否正确地插入散列映射中。他们是。一旦我尝试使用Intent.putExtra传递它,我得到这个错误。将哈希映射传递给intent

Unable to start activity ComponentInfo{com.example.test.retrofit/com.example.test.retrofit.SearchActivity}: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.HashMap 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                       at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7225) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                       Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.HashMap 
                       at com.example.abdulhakim.retrofit.SearchActivity.onCreate(SearchActivity.java:42) 
                       at android.app.Activity.performCreate(Activity.java:6876) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
                       at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:158)  
                       at android.app.ActivityThread.main(ActivityThread.java:7225)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  

这里是我在MainActivity代码:

Map<String, String> data = new HashMap<String,String>(); 
input1 = (EditText) findViewById(R.id.term); 
    input2 = (EditText) findViewById(R.id.column); 
    ImageView =(ImageButton)findViewById(R.id.search); 
    ImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, SearchActivity.class); 
      k=input1.getText().toString(); 
      t= input2.getText().toString(); 
      data.put("key",k); 
      data.put("term",t); 
      Log.v("HashMapTest KEY", data.get("key")); 
      Log.v("HashMapTest TERM", data.get("term")); 

      intent.putExtra("hash",data); 
      startActivity(intent); 

     } 
    }); 

,这里是我的第二个活动:

Intent intent = getIntent(); 
    HashMap<String, String> data = (HashMap<String, String>)intent.getSerializableExtra("hash"); 


    if (data.isEmpty()) { 
     Toast.makeText(getApplicationContext(), "nope! I didnt get the hashmap", Toast.LENGTH_LONG).show(); 
     return; 
    } 
+0

尝试'intent.putSerializableExtra(“hash”,data)' – IsuruKusumal

回答

0

使用本

intent.putExtra("hash",data.toString()); 

OR

intent.putSerializableExtra("hash",data) 
0

这很简单,所有的集合对象实现Serializable接口(SP?)接口,这意味着它们可以作为附加功能可以通过内部意向

使用putExtra(String键,可序列化的OBJ)插入HashMap和在另一个活动使用getIntent()。getSerializableExtra(String key),您将需要将返回值转换为HashMap。

0

试试这个:在您的第一项活动:

HashMap<String, String> data = new HashMap<String,String>(); //initialize properly 

Intent intent = new Intent(MainActivity.this, SearchActivity.class); 
intent.putExtra("hashMap", data); 
startActivity(intent); 

现在,在第二个活动是利用获取的数据:

Intent intent = getIntent();  
HashMap<String, String> hashMap = (HashMap<String, String>) intent.getSerializableExtra("hashMap"); 
String key = hashMap.get("key"); 
Sting term = hashMap.get("term"); 

问题就出在你的第二个activity你想投StringHashmap