我想製作一個android應用程序,它將完成啓動,然後運行一個while循環,直到用戶完成特定任務。然後代碼將運行另一個函數以確保用戶已正確完成任務。我應該如何去做這件事。我已經嘗試將on循環放入onCreate,onStart和onResume中,並在所有while循環中永久運行而不讓GUI被繪製,因此使得任務無法完成(有時我還會得到ANR消息)。我應該在哪裏放置while循環,以便在該活動開始後立即運行並且不會干擾啓動?運行暫時循環Android代碼
感謝,
andrewgies17
編輯13年3月31日2:45 PST:
所以我把RyPope的意見,並創建了一個新的線程,並且我打電話主線程功能它不喜歡那樣。這裏是我的所有代碼:
` 公共類MainActivity擴展活動{
public EditText pass1, pass2, pass3, pass4;
public int current = 1;
public boolean enteringCode = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pass1 = (EditText) findViewById(R.id.pass1);
pass2 = (EditText) findViewById(R.id.pass2);
pass3 = (EditText) findViewById(R.id.pass3);
pass4 = (EditText) findViewById(R.id.pass4);
new Thread(new Runnable() {
public void run() {
checkInputs();
}
}).start();
}
public void checkInputs() {
while(enteringCode) {
if(pass1.getText().toString().length() > 0) {
current = 2;
}
if(pass2.getText().toString().length() > 0) {
current = 3;
}
if(pass3.getText().toString().length() > 0) {
current = 4;
}
if(pass4.getText().toString().length() > 0) {
enteringCode = false;
System.out.println(Integer.parseInt(pass1.getText().toString() + pass2.getText().toString() + pass3.getText().toString() + pass4.getText().toString()));
authenticateCode(Integer.parseInt(pass1.getText().toString() + pass2.getText().toString() + pass3.getText().toString() + pass4.getText().toString()));
}
if(current == 1) {
pass1.requestFocus();
}
if(current == 2) {
pass2.requestFocus();
}
if(current == 3) {
pass3.requestFocus();
}
if(current == 4) {
pass4.requestFocus();
}
}
}
public void authenticateCode(int code) {
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
} ` 所以,當這個運行和視圖試圖要求重點崩潰,我得到以下logcat的輸出:
03-31 14:46:54.803: E/AndroidRuntime(10922): FATAL EXCEPTION: Thread-4197 03-31 14:46:54.803: E/AndroidRuntime(10922): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4062) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:730) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:779) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4005) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.invalidate(View.java:8605) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.onFocusChanged(View.java:3884) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.widget.TextView.onFocusChanged(TextView.java:8281) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.unFocus(View.java:3814) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewGroup.requestChildFocus(ViewGroup.java:530) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.handleFocusGainInternal(View.java:3706) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.requestFocus(View.java:5402) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.requestFocus(View.java:5352) 03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.requestFocus(View.java:5330) 03-31 14:46:54.803: E/AndroidRuntime(10922): at com.thirteenbit.driveSafe.MainActivity.checkInputs(MainActivity.java:51) 03-31 14:46:54.803: E/AndroidRuntime(10922): at com.thirteenbit.driveSafe.MainActivity$1.run(MainActivity.java:26) 03-31 14:46:54.803: E/AndroidRuntime(10922): at java.lang.Thread.run(Thread.java:856)
任何人有解決這種困境?
'onCreate()'可能沒問題,但我們必須查看代碼才能知道問題所在。另外,logcat如果崩潰。如果它是網絡的東西,那麼它將需要在後臺線程 – codeMagic