2014-10-12 78 views
0

这里是MainActivity.java只包括一对夫妇if/else块:的DataModel不能被转换为java.lang.String

// Simple array with a list of languages 
    String[] languages = {"Arabic", "Armenian", "Cantonese", "Cherokee", 
      "Czech", "Dutch", "English", "French", "Gaelic", "German", 
      "Greek", "Haitian Creole", "Hawaiian", "Italian", "Japanese", "Korean", 
      "Mandarin", "Navajo", "Philippines Tagalog", "Polish", "Portuguese", "Romanian", 
      "Russian", "Spanish", "Swedish", "Vietnamese"}; 

    // Simple array with a list of the spelling for Merry Christmas in language 
    final String[] merrychristmas = {"Eid Melad Majeed", "Shnorhavor Surb Tsnund", 
      "Sing-daan Faai-lohk", "ulihelisdi hunadetiyisgvi", "veselé vánoce", 
      "vrolijk kerstfeest", "Merry Christmas!", "joyeux Noël", "Nollaig Shona Duit", 
      "frohe Weihnacten", "Kalá Christoúgenna", "Jwaye Nwèl", "Mele Kalikimaka", 
      "Buon Natale", "Merīkurisumasu", "jilgohun-christmas-bonoseyo", 
      "Shèndàn kuàilè", "Nizhónígo Késhmish Da'doohleel", 
      "Mąligayang Pasko", "Wesołych Świąt", "Feliz Natal", "Crăcuin fericit", 
      "schastlivogo Rozhdestva", "Feliz Navidad", "god jul", "Chúc Mừng Giáng Sinh"}; 

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

    rowItems = new ArrayList<DataModel>(); 
    for (int i = 0; i < languages.length; i++) { 
     DataModel item = new DataModel(languages[i]); 
     rowItems.add(item); 
    } 

    listView = (ListView) findViewById(R.id.listView1); 
    CustomAdapter adapter = new CustomAdapter(this, R.layout.item_row, rowItems); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(this); 

} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
LinearLayout layout = new LinearLayout(MainActivity.this); 
    layout.setBackgroundResource(R.drawable.circle); 
    TextView tv = new TextView(MainActivity.this); 
    // set the TextView properties 
    tv.setTextColor(Color.WHITE); 
    tv.setTextSize(20); 
    tv.setPaddingRelative(22, 108, 0, 0); 
    tv.setGravity(Gravity.FILL); 
    tv.setText(merrychristmas[position]); 
    layout.addView(tv); 
    Toast toast = new Toast(MainActivity.this); 

    if (position == 0) { 
     Toast.makeText(getApplicationContext(), 
       merrychristmas[position], Toast.LENGTH_LONG); 
     toast.setView(layout); 
     toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0); 
     toast.show(); 
     _player = MediaPlayer.create(MainActivity.this, R.raw.arabic); 
     _player.start(); 
    } 
    if (position == 1) { 
     Toast.makeText(getApplicationContext(), 
       merrychristmas[position], Toast.LENGTH_LONG); 
     // set the layout as the toast view 
     toast.setView(layout); 
     toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0); 
     toast.show(); 
     _player = MediaPlayer.create(MainActivity.this, R.raw.armenian); 
     _player.start(); 
    } 
    if (position == 2) { 
     Toast.makeText(getApplicationContext(), 
       merrychristmas[position], Toast.LENGTH_LONG); 

而且CustomAdapter.java:

public class CustomAdapter extends ArrayAdapter<DataModel> { 

    Context context; 

    /****** custom adapter constructor ******/ 
    public CustomAdapter(Context context, int resourceId, List<DataModel> data) { 
     super(context, resourceId, data); 
     this.context = context; 
    } 

    /****** create a holder class to contain inflated xml file elements ******/ 

    private class ViewHolder { 
     public TextView txtlanguage; 
    } 

    /** 
    **** create each ListView row ***** 
    */ 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 
     DataModel rowItem = getItem(position); 

     LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      /****** Inflate item_row file for each row ******/ 
      convertView = mInflater.inflate(R.layout.item_row, null); 
      /****** ViewHolder object to contain item_row.xml file elements ******/ 
      holder = new ViewHolder(); 
      holder.txtlanguage = (TextView) convertView.findViewById(R.id.text1); 
      /****** set holder with LayoutInflater ******/ 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 

     /****** set model values in Holder elements ******/ 
     holder.txtlanguage.setText(rowItem.getLanguage()); 
     /****** set itemClickListener for LayoutInflater for each row ******/ 
     return convertView; 
    } 
} 

对于DataModel.java :

public class DataModel { 

private String language; 

public DataModel(String language) { 
    this.language = language; 
} 

/****** get methods ******/ 
public String getLanguage() { 
    return this.language; 
} 
/****** set methods ******/ 
public void setLanguage(String language) { 
    this.language = language; 
} 

} // end class DataModel 

这里是故障转储:

10-12 08:53:01.135 1134-1134/com.blogspot.joyouslybeingjoy.merrychristmas 
W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb3a86ba8) 
10-12 08:53:01.155 1134-1134/com.blogspot.joyouslybeingjoy.merrychristmas 
E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.blogspot.joyouslybeingjoy.merrychristmas, PID: 1134 
java.lang.ClassCastException: com.blogspot.joyouslybeingjoy.merrychristmas. 
DataModel cannot be cast to java.lang.String 
     at com.blogspot.joyouslybeingjoy.merrychristmas.MainActivity. 
     onItemClick(MainActivity.java:102) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 
     at android.widget.AbsListView$3.run(AbsListView.java:3638) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     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:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 

在此先感谢!我确实在学习很多东西,并乐在其中!感谢支持!

+0

你能否标出主要活动的第102行,以便我们知道错误发生的位置? – 2014-10-12 13:09:41

+0

请重构。任何时候你有大量的代码都是由一行代码所不同,并且你正在比较一个单一的值,你可以并且应该重构。 – 2014-10-12 13:23:18

+0

正在重新运行以获取适当的行号。行号102被注释掉了,所以必须得到一个更好的错误信息。对于重构评论,我承认我是一个新手,我不太确定你在说什么。我之前使用过重构,但那是因为名称变化等原因。谢谢你们,感谢! – 999 2014-10-12 17:37:40

回答

0

错误是上线102.我把这个和其他一些注释掉的同一个区域中的行(实际上移到了文件的底部),我确保CustomAdapter扩展ArrayAdapter到位,做了一个干净的,它的工作!我现在将所有注释掉的行移动到NotePad ++!非常感谢。真的很喜欢从这个委员会学习。

0

它是CustomAdapter extends ArrayAdapter。 使用CustomAdapter extends ArrayAdapter<DataModel> 这就是我想其他的问题,请发表您的线路102

+0

我复制了点点滴滴。我正在重新运行以查看要定位哪条线。谢谢!我看到如何识别行号。可能会回来另一个问题! – 999 2014-10-12 17:35:30

+0

你解决了这个问题吗?如果它仍然存在,那么让我知道 – therealprashant 2014-10-12 20:11:21

0
CustomAdapter extends ArrayAdapter  

意味着

CustomAdapter extends ArrayAdapter <Object> 

不喜欢这一点,将工作

CustomAdapter extends ArrayAdapter <DataModel> 
+0

我确实有:自定义适配器扩展ArrayAdapter 999 2014-10-12 17:34:26

相关问题