2014-10-12 4 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 основной деятельности, чтобы мы знали, где происходит ошибка? –

+0

Пожалуйста, рефакторинг. Каждый раз, когда у вас есть фрагменты кода, которые отличаются одной строкой, и вы сравниваете одно значение, вы можете и должны рефакторировать. –

+0

Повторите попытку, чтобы получить соответствующий номер строки. Номер строки 102 был прокомментирован, поэтому необходимо получить сообщение об ошибке. Для комментария рефакторинга, я признаю, что я такой новичок, я не совсем уверен, что вы говорите. Раньше я использовал рефакторинг, но это было для изменений имени и т. Д. Благодарю вас, оцените! – 999

ответ

0

Ошибка была в строке 102. Я переместил это и несколько других прокомментированных строк в одной области (на самом дне файла), и я гарантирую, что CustomAdapter расширяет ArrayAdapter на месте, сделал чистый и работает! Я перемещаю все мои прокомментированные строки в NotePad ++ сейчас! Спасибо. Очень нравится учиться с этой доски.

0

Это CustomAdapter extends ArrayAdapter. Использование CustomAdapter extends ArrayAdapter<DataModel> Это проблема, которую я думаю, еще пожалуйста, напишите вашу линию 102.

+0

Я скопировал кусочки. Повторите попытку, чтобы увидеть, какую линию нужно настроить. Спасибо! Я вижу, как рассказать номер строки. Мог бы вернуться с другим вопросом! – 999

+0

Решили проблему? если он все еще там, то дайте мне знать – therealprashant

0
CustomAdapter extends ArrayAdapter  

означает

CustomAdapter extends ArrayAdapter <Object> 

Делай так, он будет работать

CustomAdapter extends ArrayAdapter <DataModel> 
+0

У меня это есть: Пользовательский адаптер расширяет ArrayAdapter 999

Смежные вопросы