- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我的 JAVA 代码。当我运行我的应用程序时,它崩溃了,我的日志中出现了以下错误
11-21 00:21:48.828: E/AndroidRuntime(349): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.geekosoft.contactsonline/com.geekosoft.contactsonline.AddContact}: java.lang.ClassCastException: android.widget.EditText 11-21 00:21:48.828: E/AndroidRuntime(349): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.os.Handler.dispatchMessage(Handler.java:99) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.os.Looper.loop(Looper.java:123) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.app.ActivityThread.main(ActivityThread.java:3683) 11-21 00:21:48.828: E/AndroidRuntime(349): at java.lang.reflect.Method.invokeNative(Native Method) 11-21 00:21:48.828: E/AndroidRuntime(349): at java.lang.reflect.Method.invoke(Method.java:507) 11-21 00:21:48.828: E/AndroidRuntime(349): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 11-21 00:21:48.828: E/AndroidRuntime(349): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 11-21 00:21:48.828: E/AndroidRuntime(349): at dalvik.system.NativeStart.main(Native Method) 11-21 00:21:48.828: E/AndroidRuntime(349): Caused by: java.lang.ClassCastException: android.widget.EditText 11-21 00:21:48.828: E/AndroidRuntime(349): at com.geekosoft.contactsonline.AddContact.initilizeEditContactInfo(AddContact.java:123) 11-21 00:21:48.828: E/AndroidRuntime(349): at com.geekosoft.contactsonline.AddContact.initilize(AddContact.java:68) 11-21 00:21:48.828: E/AndroidRuntime(349): at com.geekosoft.contactsonline.AddContact.onCreate(AddContact.java:42) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 11-21 00:21:48.828: E/AndroidRuntime(349): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
and here is my Java code
package com.geekosoft.contactsonline; import java.util.ArrayList; import java.util.Iterator; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.os.Build; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TableLayout; public class AddContact extends Activity implements OnClickListener { public static final String TAG = AddContact.class.getSimpleName(); ArrayList contactPhoneTypes, contactEmailTypes, contactIMTypes, contactAddressTypes; String contactid; int phoneNumbersIdStarter, emailIdStarter, imIdStarter, addressIdStarter; LayoutInflater layoutInflater; EditText name, number; Spinner phoneType, emailType, addressType; Button addPhoneField, addEmailField, addIMField, addAddressField; TableLayout phoneFiledsCont, emailFiledsCont, imFiledsCont, addressFiledsCont; @Override protected void onCreate (Bundle contactsOnline) { super.onCreate(contactsOnline); setContentView(R.layout.add_contact); initilize(); } public void initilize () { initilizeSpinnerTypes(); phoneNumbersIdStarter = 1000; emailIdStarter = 2000; imIdStarter = 3000; addressIdStarter = 4000; layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); name = (EditText) findViewById(R.id.etContactName); addPhoneField = (Button) findViewById(R.id.bAddPhoneField); addEmailField = (Button) findViewById(R.id.bAddEmailField); addIMField = (Button) findViewById(R.id.bAddIMField); addAddressField = (Button) findViewById(R.id.bAddaddressField); phoneFiledsCont = (TableLayout) findViewById(R.id.tlPhoneFiledCont); emailFiledsCont = (TableLayout) findViewById(R.id.tlEmailFiledsCont); imFiledsCont = (TableLayout) findViewById(R.id.tlIMFiledsCont); addressFiledsCont = (TableLayout) findViewById(R.id.tlAddressFiledsCont); addPhoneField.setOnClickListener(this); addEmailField.setOnClickListener(this); addIMField.setOnClickListener(this); addAddressField.setOnClickListener(this); initilizeEditContactInfo(); } public void initilizeSpinnerTypes() { contactPhoneTypes = new ArrayList(); contactPhoneTypes.add(ContactsContract.CommonDataKinds.Phone.TYPE_HOME); contactPhoneTypes.add(ContactsContract.CommonDataKinds.Phone.TYPE_WORK); contactPhoneTypes.add(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); contactPhoneTypes.add(ContactsContract.CommonDataKinds.Phone.TYPE_OTHER); // contactPhoneTypes.add(ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM); contactEmailTypes = new ArrayList(); contactEmailTypes.add(ContactsContract.CommonDataKinds.Email.TYPE_HOME); contactEmailTypes.add(ContactsContract.CommonDataKinds.Email.TYPE_WORK); contactEmailTypes.add(ContactsContract.CommonDataKinds.Email.TYPE_MOBILE); contactEmailTypes.add(ContactsContract.CommonDataKinds.Email.TYPE_OTHER); contactIMTypes = new ArrayList(); contactIMTypes.add(ContactsContract.CommonDataKinds.Im.TYPE_HOME); contactIMTypes.add(ContactsContract.CommonDataKinds.Im.TYPE_WORK); contactIMTypes.add(ContactsContract.CommonDataKinds.Im.TYPE_OTHER); contactAddressTypes = new ArrayList(); contactAddressTypes.add(ContactsContract.CommonDataKinds.SipAddress.TYPE_HOME); contactAddressTypes.add(ContactsContract.CommonDataKinds.SipAddress.TYPE_WORK); contactAddressTypes.add(ContactsContract.CommonDataKinds.SipAddress.TYPE_OTHER); } public void initilizeEditContactInfo () { contactid = getIntent().getStringExtra("contactId"); Log.d(TAG, "id = "+contactid); Log.d(TAG, "query = "+ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); ContentResolver cr = getContentResolver(); Cursor contact = cr.query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone._ID+" = ?",new String[]{contactid}, "DISPLAY_NAME ASC"); // Cursor contacts = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); if (contact.getCount() > 0) { contact.moveToFirst(); String name = contact.getString(contact.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); Log.d(TAG, "name = "+name); this.name.setText(name); int loopCounter = 0; if (Integer.parseInt(contact.getString(contact.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+" = ?",new String[]{contactid}, null); while (phones.moveToNext()) { loopCounter++; int phoneType = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Log.d(TAG, "phone = "+phoneNumber); addTextField("phone"); EditText phoneNumberField = (EditText) findViewById(8084+phoneNumbersIdStarter); phoneNumberField.setText(phoneNumber); Log.d("Spinner Getting", "Spinner Id = " + (8083+phoneNumbersIdStarter)); Spinner phoneNumberSpinner = (Spinner) findViewById(8083+phoneNumbersIdStarter); Log.d("After Spinner", "phone counter = " + phoneNumbersIdStarter); switch (phoneType) { case Phone.TYPE_MOBILE: // phoneNumberSpinner.setSelection(2, false); break; case Phone.TYPE_HOME: // phoneNumberSpinner.setSelection(0, false); String phoneTypesCodes = "home = "+Phone.TYPE_HOME+"mobile = "+Phone.TYPE_MOBILE+"work = "+Phone.TYPE_WORK +"other = "+Phone.TYPE_OTHER; Log.d(name + "(home number)", phoneNumber + phoneTypesCodes); break; case Phone.TYPE_WORK: // phoneNumberSpinner.setSelection(1, false); break; case Phone.TYPE_OTHER: // phoneNumberSpinner.setSelection(3, false); break; } } phones.close(); } } contact.close(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bAddPhoneField: addTextField("phone"); break; case R.id.bAddEmailField: addTextField("email"); break; case R.id.bAddIMField: addTextField("im"); break; case R.id.bAddaddressField: addTextField("address"); break; } } public void addTextField(String fieldType) { // for text field code is 84 // for spinner code is 83 if (fieldType.equals("phone")) { // for phone number code is 80 phoneNumbersIdStarter++; View view = layoutInflater.inflate(R.layout.add_phone_row, null); EditText phoneNumberField = (EditText) view.findViewById(R.id.etContactPhone); Spinner phoneTypeSpinner = (Spinner) view.findViewById(R.id.sContactPhoneType); Log.d(TAG, "spinner id = " + phoneTypeSpinner.getId()); phoneNumberField.setId(8084+phoneNumbersIdStarter); phoneTypeSpinner.setId(8083+phoneNumbersIdStarter); Log.d("Spinner Created", "Spinner Id = " + phoneTypeSpinner.getId()); setSpinnerValues(phoneTypeSpinner, "phone"); phoneFiledsCont.addView(view); } else if (fieldType.equals("email")) { // for email code is 69 emailIdStarter++; View view = layoutInflater.inflate(R.layout.add_email_row, null); EditText emailAddressField = (EditText) view.findViewById(R.id.etContactEmail); Spinner emailTypeSpinner = (Spinner) view.findViewById(R.id.sContactEmailType); emailAddressField.setId(6984+emailIdStarter); emailTypeSpinner.setId(6983+emailIdStarter); Log.d(TAG, "inside true"); setSpinnerValues(emailTypeSpinner, "email"); Log.d(TAG, "inside true 2"); emailFiledsCont.addView(view); } else if (fieldType.equals("im")) { // for address code is 65 imIdStarter++; View view = layoutInflater.inflate(R.layout.add_im_row, null); EditText imField = (EditText) view.findViewById(R.id.etContactIM); Spinner imTypeSpinner = (Spinner) view.findViewById(R.id.sContactIMType); imField.setId(6584+imIdStarter); imTypeSpinner.setId(6583+imIdStarter); setSpinnerValues(imTypeSpinner, "im"); imFiledsCont.addView(view); } else if (fieldType.equals("address")) { // for im code is 73 addressIdStarter++; View view = layoutInflater.inflate(R.layout.add_address_row, null); EditText addressField = (EditText) view.findViewById(R.id.etContactAddress); Spinner addressTypeSpinner = (Spinner) view.findViewById(R.id.sContactAddressType); addressField.setId(7384+addressIdStarter); addressTypeSpinner.setId(7383+addressIdStarter); setSpinnerValues(addressTypeSpinner, "address"); addressFiledsCont.addView(view); } } public void setSpinnerValues (Spinner spinner, String spinnerType) { ArrayAdapter spinnerAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Iterator iter = null; if (spinnerType.equals("phone")) { iter = contactPhoneTypes.iterator(); } else if (spinnerType.equals("email")) { iter = contactEmailTypes.iterator(); } else if (spinnerType.equals("im")) { iter = contactIMTypes.iterator(); } else if (spinnerType.equals("address")) { iter = contactAddressTypes.iterator(); } while (iter.hasNext()) { if (spinnerType.equals("phone")) { spinnerAdapter.add(ContactsContract.CommonDataKinds.Phone.getTypeLabel(this.getResources(), iter.next(), getString(R.string.undefinedTypeLabel)).toString()); } else if (spinnerType.equals("email")) { spinnerAdapter.add(ContactsContract.CommonDataKinds.Email.getTypeLabel(this.getResources(), iter.next(), getString(R.string.undefinedTypeLabel)).toString()); } else if (spinnerType.equals("im")) { spinnerAdapter.add(ContactsContract.CommonDataKinds.Im.getTypeLabel(this.getResources(), iter.next(), getString(R.string.undefinedTypeLabel)).toString()); } else if (spinnerType.equals("address")) { spinnerAdapter.add(ContactsContract.CommonDataKinds.Im.getTypeLabel(this.getResources(), iter.next(), getString(R.string.undefinedTypeLabel)).toString()); } } spinner.setAdapter(spinnerAdapter); spinner.setPrompt(getString(R.string.selectLabel)); } }
here is my add_contact.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TableLayout
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TableRow>
<TextView android:text="Target Account"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</TableRow>
<TableRow>
<Spinner android:id="@+id/accountSpinner"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:layout_weight="1" />
</TableRow>
<TableRow>
<TextView android:text="Contact Name"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</TableRow>
<TableRow>
<EditText android:id="@+id/etContactName"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_weight="1"/>
</TableRow>
<TableRow>
<TextView android:text="Contact Phone"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<Button android:id="@+id/bAddPhoneField"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Add Field"/>
</TableRow>
</TableLayout>
<TableLayout android:id="@+id/tlPhoneFiledCont"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</TableLayout>
<TableLayout
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TableRow>
<TextView android:text="Contact Email"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</TableRow>
</TableLayout>
<Button android:id="@+id/bAddEmailField"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Add Field"/>
<TableLayout android:id="@+id/tlEmailFiledsCont"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</TableLayout>
<TextView android:text="Contact IM"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Button android:id="@+id/bAddIMField"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Add Field"/>
<TableLayout android:id="@+id/tlIMFiledsCont"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</TableLayout>
<TextView android:text="Contact Address"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Button android:id="@+id/bAddaddressField"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Add Field"/>
<TableLayout android:id="@+id/tlAddressFiledsCont"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</TableLayout>
<TableLayout
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TableRow>
<Button android:text="@string/save"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:id="@+id/contactSaveButton" android:layout_weight="1"/>
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
这是我的 add_phone_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent" >
<EditText android:id="@+id/etContactPhone"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:inputType="phone" />
<Spinner android:id="@+id/sContactPhoneType"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</TableRow>
我正在创建 Spinner
和 EditText
在下面的函数中动态
if (fieldType.equals("phone")) { // for phone number code is 80 phoneNumbersIdStarter++; View view = layoutInflater.inflate(R.layout.add_phone_row, null); EditText phoneNumberField = (EditText) view.findViewById(R.id.etContactPhone); Spinner phoneTypeSpinner = (Spinner) view.findViewById(R.id.sContactPhoneType); Log.d(TAG, "spinner id = " + phoneTypeSpinner.getId()); phoneNumberField.setId(8084+phoneNumbersIdStarter); phoneTypeSpinner.setId(8083+phoneNumbersIdStarter); Log.d("Spinner Created", "Spinner Id = " + phoneTypeSpinner.getId()); setSpinnerValues(phoneTypeSpinner, "phone"); phoneFiledsCont.addView(view); }
并像下面的行一样获取它们的值
EditText phoneNumberField = (EditText) findViewById(8084+phoneNumbersIdStarter); Spinner phoneNumberSpinner = (Spinner) findViewById(8083+phoneNumbersIdStarter);
并且每次我添加这些字段时也会在 phoneNumbersIdStarter
如果我在我的代码中注释以下行,它运行良好
Spinner phoneNumberSpinner = (Spinner) findViewById(8083+phoneNumbersIdStarter);
最佳答案
您是否有某些特定原因不使用 R.id. 访问小部件?
我不认为使用“8083+phoneNumbersIdStarter”是个好主意,因为在类 R 中生成的 int id 会在每次编译时发生变化,所以 int 8083+phoneNumbersIdStarter 可能指的是一个不是的小部件一个 EditText。
所以,改成这样:
Spinner phoneNumberSpinner = (Spinner) findViewById(R.id.your_spinner_id);
关于java.lang.ClassCastException : android. 部件.EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048071/
/** Called when the user clicks the Send button */ public void sendMessage(View view) { Intent i
我已经编写了 EditText 的子类。这是那个子类: package com.package.foo; import android.content.Context; import android.
我有一个用户名和密码 XML 段 我希望当用户名字段到达第9个字符时光标焦点自动跳转到密码字段 我在看 Focus next textview automatically并且正在尝试: fin
我知道这类问题被问过很多次。但仍然没有人给出完美的答案。 我有问题: 我想从 EditText1 ** 移动到另一个 **EditText2 。我已经检测到editText1,但如何将光标移动到edi
我有 2 个 EditText(myEditText1 和 myEditText2) 我需要触摸 myEditText1 1.做一些生意[这里没有问题,需要申请的业务] 2. 然后请求焦点到 myEd
我想在用户输入 EditText 时将文本放入我的应用程序中的某个字符串中,并使用它在 Activity 中生动地显示它(在不同的 View 中......) - 就像谷歌的实时/即时搜索一样...
当我将文本插入到我的 EditText 字段时,文本本身与 EditText 的行之间存在异常间隙。这是我终端的打印屏幕,您可以在其中看到我正在谈论的这个差距,它被标记为红色。 我试过文本对齐和引力但
我的应用程序需要帮助。这是我的相对布局的 xml 文件,我需要在按下 Enter 键后跳转到下一个编辑文本。但是有一个问题,如果我正在写入 editTextKm 并按 Enter 键,它会跳转到 ed
Hello All 我已经将 onLongClickListener() 用于我的 EditText View ,但是每当我长时间单击 View 时,就会出现一个弹出窗口,不允许我执行我的操作onLo
EditText 快把我们逼疯了!真的! 我们的应用程序登录屏幕出现问题。它包含两个 EditText,但只有第一个(用户名)获得焦点,通过 SoftKeyboard 仅在触摸/单击用户名 EditT
如何在kotlin中获取editText并用toast显示。 var editTextHello = findViewById(R.id.editTextHello) 我试过了,但显示对象 Toast
我一直在浏览各种线索来解决这个问题,但我仍然感到困惑。当我将“adjustPan”应用于底部具有 EditText 的 Activity 时,UI 会正确向上推,但编辑文本会被底部的键盘稍微遮挡。经过
我有两个类:a 和 b。在类 a 中,我有一个线程,当变量 x 的值小于 1000 时,它会将变量 x 加一。在类 b(Activity 类)中,我有一个名为 ed 的 EditText。每当a类中x
今天我遇到了一个非常有趣的情况。 假设: EditText 从 XML 实例化。 EditText editText; editText = findViewByID(R.id.editT
有谁知道我的代码出了什么问题,我正在尝试比较编辑文本字段中的输入,以确保它们在创建帐户之前具有相同的值。 //compare the fields contents if(editT
制作一个简单的卡路里转换器。 这是图片中的问题。 我使用的是 Genymotion 模拟器。 这是我遇到问题的屏幕部分: 当我单击 EditText 数字字段时,数字键盘会出现 但是我必须单击下一个箭
全部 - 我试图隐藏 EditText B、C,直到 EditText A 中至少有一个字符。我尝试过使用文本观察器... EditText editText = (EditText) findVie
我正在努力完成 “Sam 的 24 小时 Android 应用程序开发技术”,但在某些时候我的昵称和电子邮件设置停止正确保存。它现在根本不保存昵称并将电子邮件保存到两者。我做了什么导致这个,我该如何解
我有一个 SharedPreferences,它保存来自一个 Activity 的 EditText 输入并在另一个 Activity 中显示字符串值。 当我在 EditText 字段中输入内容并按下
这一定是一个我可能会再次忽略的简单问题。这是我的问题我的 string.xml 上有一个字符串数组 Alabama Florida Los Angeles Virgi
我是一名优秀的程序员,十分优秀!