如果有人能幫我解決一些小問題,我會很高興。應用程序應顯示素數並從上次顯示的圖開始。如何進行?
我希望我的應用程序在檢測到質數時顯示用戶。 現在,應用程序僅顯示最後一個primenumber,取決於while循環中的條件。如果每隔0.5秒左右列舉一次主要數字就會很好。
我試過使用thread.sleep,但應用程序不能正常工作。 當應用程序關閉然後重新啓動時,我希望計數從最後一個素數開始計數。
任何ides人?
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.lang.Math;
import java.lang.*;
import java.util.concurrent.ExecutionException;
public class MainActivity extends AppCompatActivity {
SharedPreferences sharedPref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
generateOddNumber(1);
}
private boolean isPrime(long candidate) {
long sqrt = (long) Math.sqrt(candidate);
for (long i = 3; i <= sqrt; i += 2)
if (candidate % i == 0) return false;
return true;
}
public void saveInfo(long prime) {
sharedPref = getSharedPreferences("PrimeNumbers", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putLong("Number", prime);
editor.apply();
}
public void getData() {
sharedPref = getSharedPreferences("PrimeNumbers", Context.MODE_PRIVATE);
long nr = sharedPref.getLong("Number", 0);
}
public void generateOddNumber(long x) {
TextView myTextView = (TextView) findViewById(R.id.textView);
while (x < 1000) {
if (isPrime(x) == true) {
saveInfo(x);
myTextView.setText(String.valueOf(x));
try { Thread.sleep(1000);}
catch (InterruptedException e){
e.printStackTrace();
}
}
x = x + 2;
}
}
}
我想應用程序來顯示primenumber對於用戶來說,一會。像1,然後3,然後7等等。我該如何繼續? – CodeKiller
你可以使用[AsyncTask](https://developer.android.com/reference/android/os/AsyncTask.html)。我在答案中解釋了你需要經歷的步驟。您需要花一些時間閱讀文檔並理解它。無論如何,在onCreate開始你的任務來產生你的號碼和填充用戶界面。當應用程序正在終止時,將該號碼保存在onSstop()中。你可以在onCreat()中讀回它 – Vahid