我放棄了。我使用了很多子字符串,但是這次我無法使它工作。我正在從微調器中選擇一個聯繫人(填充了手機的聯繫人),我想要所選聯繫人的姓。部分代碼:Android的子力關閉
公共類MyOnItemSelectedListener實現OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
selectedname = parent.getItemAtPosition(pos).toString();
sn = selectedname .indexOf(' ');
String selectedname2= selectedname.substring(1, 3); //force close line
}
public void onNothingSelected(AdapterView parent) {
}
}
的selectedname和sn變量返回的實際值。 例如在
BtnOK = (Button)findViewById(R.id.Button01);
BtnOK.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(Alarm.this, "selname: " + selectedname + "-" + sn, Toast.LENGTH_LONG).show();
}
});
回報selname:安娜 - 4
但是,如果我包括String selectedname2= selectedname.substring(1, 3);
線,迫使其關閉。 任何想法?
的logcat:
07-04 17:05:32.140: ERROR/AndroidRuntime(280): FATAL EXCEPTION: main
07-04 17:05:32.140: ERROR/AndroidRuntime(280): java.lang.StringIndexOutOfBoundsException
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at java.lang.String.substring(String.java:1579)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at com.bfarago.app.Alarm$MyOnItemSelectedListener.onItemSelected(Alarm.java:577)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at android.widget.AdapterView.access$200(AdapterView.java:42)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at android.os.Handler.handleCallback(Handler.java:587)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at android.os.Handler.dispatchMessage(Handler.java:92)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at android.os.Looper.loop(Looper.java:123)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at java.lang.reflect.Method.invokeNative(Native Method)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at java.lang.reflect.Method.invoke(Method.java:521)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-04 17:05:32.140: ERROR/AndroidRuntime(280): at dalvik.system.NativeStart.main(Native Method)
線577 String selectedname2= selectedname.substring(1, 3);
這條線將是String selectedname2= selectedname.substring(1, sn);
,我只是想弄清楚什麼是錯的。
EDIT2:全碼:
public class Alarm extends Activity {
public ArrayList<String> myArr = new ArrayList<String>();
String contactName;
int spaceIndex, spaceLastIndex, spaceIndex2;
String selectedname;
String selectedname2;
int sn;
int selnamelength;
String[] words;
String surname;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alarm);
contactName = null;
Context context = getApplicationContext();
Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext())
{
contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
spaceIndex = contactName.indexOf(' ');
spaceLastIndex = contactName.lastIndexOf(' ');
if (spaceIndex > 0) {myArr.add(contactName);}
else if (spaceLastIndex > 0) {myArr.add(contactName);}
else {myArr.add(contactName);}
}
myArr.add("");
Collections.sort(myArr);
Spinner sp1 = (Spinner)findViewById(R.id.Spinner01);
final ArrayAdapter adapter3 = new ArrayAdapter(this, android.R.layout.simple_spinner_item, myArr);
sp1.setAdapter(adapter3);
sp1.setOnItemSelectedListener(new MyOnItemSelectedListener());
}
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
selectedname = parent.getItemAtPosition(pos).toString();
sn = selectedname.indexOf(' ');
selnamelength = selectedname.length();
selectedname2 = selectedname.substring(1, 3); //force closes
if (!selectedname.equals(""))
{
Toast.makeText(Alarm.this, "selectedname.length = " + selnamelength, Toast.LENGTH_LONG).show(); //This is working
}
}
public void onNothingSelected(AdapterView parent) {
}
}
}
通過,分裂()函數的工作方式......
添加堆棧跟蹤,請 – mibollma
你能更具體? (用於分割字符串string.split(「」)似乎更好)。 – gregory561