0

ユーザーが携帯電話番号で登録できるAndroidアプリを開発しました。アプリに電話番号を保存して、次回ユーザーがアプリを開いたときに、Whatsapp と同様に電話番号を再度入力する必要がないようにしたい..ここに私のコードがありますが、機能しません。アプリを開くたびに電話番号を入力する必要があり、さらに、このコードをアプリに追加した後、アプリが非常に重くて遅くなりました。

  if (android.os.Build.VERSION.SDK_INT > 9) 
  {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    try {
        TelephonyManager tMgr = (TelephonyManager) getApplicationContext()
                .getSystemService(Context.TELEPHONY_SERVICE);
        mPhoneNumber = tMgr.getLine1Number().toString();
    } catch (Exception e) {
        String EE = e.getMessage();
    }
    if (mPhoneNumber == null) {
    try {
        fOut = openFileOutput("textfile.txt", MODE_WORLD_READABLE);

        fIn = openFileInput("textfile.txt");
        InputStreamReader isr = new InputStreamReader(fIn);
        char[] inputBuffer = new char[50];
        if (isr.read(inputBuffer) == 0) {

        }

    } catch (IOException ioe) {
        ioe.printStackTrace();
    }

    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Warrning");
    alert.setMessage("Please Set Your Phone number");
    final EditText input = new EditText(this);
    alert.setView(input);
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            mPhoneNumber = input.getText().toString();
            try {
                fIn = openFileInput("textfile.txt");
                InputStreamReader isr = new InputStreamReader(fIn);
                char[] inputBuffer = new char[50];
                if (isr.read(inputBuffer) == 0) {
                    OutputStreamWriter osw = new OutputStreamWriter(fOut);
                    // ---write the string to the file---
                    osw.write(mPhoneNumber);
                    osw.flush();
                    osw.close();
                    // ---display file saved message---
                    Toast.makeText(getBaseContext(),
                            "Phone number saved successfully!",
                            Toast.LENGTH_SHORT).show();
                    // ---clears the EditText---
                    input.setText("");
                } else {
                    int charRead;
                    while ((charRead = isr.read(inputBuffer)) > 0) {
                        // ---convert the chars to a String---
                        String readString = String.copyValueOf(inputBuffer,
                                0, charRead);
                        mPhoneNumber = readString;
                        inputBuffer = new char[50];
                    }
                    // ---set the EditText to the text that has been
                    // read---

                    Toast.makeText(getBaseContext(),
                            "Phone number read successfully!",
                            Toast.LENGTH_SHORT).show();
                }

            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
            int UserServiceId = CallLogin(mPhoneNumber);
            if (UserServiceId > 0) {
                Intent Service = new Intent(MainScreeen.this,
                        RecipeService.class);
                Service.putExtra("UserId", UserServiceId);
                startService(Service);
            } else {
                Intent Reg = new Intent(MainScreeen.this,
                        Regsteration.class);
                Reg.putExtra("PhoneNumber", mPhoneNumber);
                startActivity(Reg);
            }
        }
    });
    alert.show();
    } else {

        int UserServiceId = CallLogin(mPhoneNumber);
        if (UserServiceId > 0) {
            Intent Service = new Intent(MainScreeen.this,
                    RecipeService.class);
            Service.putExtra("UserId", UserServiceId);
            startService(Service);
        } else {
            Intent Reg = new Intent(MainScreeen.this, Regsteration.class);
            Reg.putExtra("PhoneNumber", mPhoneNumber);
            startActivity(Reg);
        }
    } 

それを理解するのを手伝ってください!!

4

2 に答える 2

0

さて、このコードブロックでは:

if (mPhoneNumber == null) {
try {
    fOut = openFileOutput("textfile.txt", MODE_WORLD_READABLE);
    fIn = openFileInput("textfile.txt");

出力用にファイルを開くと、既に書き込んだものはすべて破棄されます。後でこのファイルから読み取ろうとしても、手遅れです。

また、ここにはコードが多すぎます。車輪を再発明しないでください。一度に 1 文字ずつファイルを読み取る必要はありません。ファイルに文字列を書き込んで、後で再度読み返すだけの場合は、 と を使用DataInputStreamして、と を使用しDataOutputStreamて文字列を直接読み書きできます。ファイルを読み取る簡単な例を次に示します。readUTF()writeUTF()

    DataInputStream in = new DataInputStream(openFileInput("textfile.txt"));
    String contents = in.readUTF();

ファイルを書き込むには、次を使用します。

    DataOuputStream out = new DataOutputStream(openFileOutput("textfile.txt", 0));
    out.writeUTF(phoneNumber);

明らかに、try/catch ブロックを追加して例外を処理し、ブロック内のストリームを確実に閉じる必要があり finallyますが、このようにするとコードが大幅に少なくなります。

于 2013-05-13T20:06:11.260 に答える