2017-12-03 3 views
0

Beim Ausführen des folgenden Programms gibt es einen Fehler "java.lang.String kann nicht in java.util.HashMap umgewandelt werden". Wer kann mir helfen, den Zweck zu erreichen, ohne den Zweck des Programms zu ändern? Danke! ArrayList> AL = neue ArrayList>();java.lang.String kann nicht in java.util.HashMap umgewandelt werden

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_outaccountinfo); 

    ListView lv = (ListView) findViewById(R.id.lvoutinfo); 
    ArrayList<HashMap<String, String>> AL = new ArrayList<HashMap<String, String>>(); 
    DBOpen open = new DBOpen(Outaccountinfo.this); 
    SQLiteDatabase db = open.getWritableDatabase(); 
    Cursor cursor = db.query("outaccount", null, null, null, null, null, null, null); 
    while (cursor.moveToNext()) { 
     if (cursor.moveToFirst()) { 
      do { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       String str_id = cursor.getString(cursor.getColumnIndex("id")); 
       String str_money = cursor.getString(cursor.getColumnIndex("outmoney")); 
       String str_time = cursor.getString(cursor.getColumnIndex("time")); 
       String str_type = cursor.getString(cursor.getColumnIndex("type")); 
       String str_mark = cursor.getString(cursor.getColumnIndex("mark")); 
       map.put("id", str_id); 
       map.put("outmoney", str_money); 
       map.put("time", str_time); 
       map.put("type", str_type); 
       map.put("mark", str_mark); 
       AL.add(map); 
      } while (cursor.moveToNext()); 

     } 
    } 
    String[] str = new String[cursor.getCount()]; 
    for (int i = 0; i < cursor.getCount(); i++) { 
     str[i] = AL.get(i).get("id").toString() + "|" + " " + "money:" + String.valueOf(AL.get(i).get("outmoney")) 
       + " " + "time:" + AL.get(i).get("time").toString() + " " + "type:" + AL.get(i).get("type").toString() 
       + " " + "mark:" + AL.get(i).get("mark").toString(); 
     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
       str); 
     lv.setAdapter(arrayAdapter); 
    } 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // TODO Auto-generated method stub 
      HashMap<String, String> map = (HashMap<String, String>) parent.getItemAtPosition(position); 
      Toast.makeText(Outaccountinfo.this, map.get("type"), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 
+0

In was genau Linie Sie die Ausnahme bekam? – motis10

Antwort

0

Sie ArrayAdapter<String> verwenden bedeutet, dass Sie Adapter-Objekt von Strings übergeben.

Wenn Sie nun auf Ihren Artikel geklickt und nach parent.getItemAtPosition(position); gefragt haben, erhalten Sie eine Object.
Wenn Sie in diese Funktion gehen, können Sie sehen, dass die Object, die Sie erhalten, nach Position und nach dem Typ ist, den Sie an die Adapter (String) gesendet haben.
Also, wenn Sie versuchen, diese Zeichenfolge an (HashMap<String, String>) zu werfen, erhalten Sie die Ausnahme.

Versuch, so etwas zu tun, nachdem Sie geklickt:

HashMap<String, String> map = new HashMap<String, String>(); // Parameter in outside the click listener 

    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      map.put("someKey", parent.getItemAtPosition(position)); 
      Toast.makeText(Outaccountinfo.this, map.get("type"), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
0

***** Können Sie diesen Code versuchen, kann es hilfreich sein *****

public class MainActivity erstreckt AppCompatActivity. {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView lv = (ListView) findViewById(R.id.lvoutinfo); 
    ArrayList<HashMap<String, String>> AL = new ArrayList<HashMap<String, String>>(); 

    SQLiteDatabase db = openOrCreateDatabase("Account",MODE_PRIVATE,null); 
    db.execSQL("CREATE TABLE IF NOT EXISTS outaccount(id text,outmoney text,time text,type text,mark text);"); 
    db.execSQL("INSERT INTO outaccount VALUES('1','100','10','saving','80');"); 
    Cursor cursor = db.query("outaccount", null, null, null, null, null, null, null); 
    while (cursor.moveToNext()) { 
     if (cursor.moveToFirst()) { 
      do { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       String str_id = cursor.getString(cursor.getColumnIndex("id")); 
       String str_money = cursor.getString(cursor.getColumnIndex("outmoney")); 
       String str_time = cursor.getString(cursor.getColumnIndex("time")); 
       String str_type = cursor.getString(cursor.getColumnIndex("type")); 
       String str_mark = cursor.getString(cursor.getColumnIndex("mark")); 
       map.put("id", str_id); 
       map.put("outmoney", str_money); 
       map.put("time", str_time); 
       map.put("type", str_type); 
       map.put("mark", str_mark); 
       AL.add(map); 
      } while (cursor.moveToNext()); 

     } 
    } 
    String[] str = new String[cursor.getCount()]; 
    for (int i = 0; i < cursor.getCount(); i++) { 
     str[i] = AL.get(i).get("id").toString() + "|" + " " + "money:" + String.valueOf(AL.get(i).get("outmoney")) 
       + " " + "time:" + AL.get(i).get("time").toString() + " " + "type:" + AL.get(i).get("type").toString() 
       + " " + "mark:" + AL.get(i).get("mark").toString(); 
     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
       str); 
     lv.setAdapter(arrayAdapter); 
    } 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // TODO Auto-generated method stub 
      HashMap<String, String> map = (HashMap<String, String>) parent.getItemAtPosition(position); 
      Toast.makeText(MainActivity.this, map.get("type"), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

}

+0

Diese Antwort wäre besser, wenn Sie ein paar Sätze enthalten, die beschreiben, was es behebt und warum. – Eric

Verwandte Themen