2017-03-08 5 views
-1

2つのテキストフィールドからユーザー入力を取得し、ハッシュマップに格納しています。値がハッシュマップに正しく挿入されているかどうかを確認しました。そして彼らは。 Intent.putExtraを使用して渡すと、このエラーが発生します。ここハッシュマップをインテントに渡す

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

try 'intent.putSerializableExtra(" hash "、data)' – IsuruKusumal

答えて

0

使用この

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

OR

intent.putSerializableExtra("hash",data) 
0

これは非常に単純ですが、すべてのコレクションは、HashMapを挿入するためにシリアライズ(SP?)彼らはテント内エクストラとして

使用putExtra渡すことができることを意味しますインターフェース(文字列のキーを、シリアライズOBJ)を実装するオブジェクトと他のアクティビティでは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"); 

問題は、あなたがHashmap

Stringをキャストしようとしているあなたのセカンド activityにあり
関連する問題