私はあきらめます。私は部分文字列をたくさん使っていますが、今回は動作させることができません。私はスピナーから連絡先を選択しています(電話の連絡先が入力されています)、その連絡先の姓が必要です。コードの一部: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変数が真の値を返す実装します。例: アンナ-4
しかし、私はString selectedname2= selectedname.substring(1, 3);
行が含まれている場合、それは閉じを強制:
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。 アイデア
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, sn);
だろうString selectedname2= selectedname.substring(1, 3);
です。
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を分割する場合はstring.split( "")が良いと思われます)。 – gregory561