2012-02-19 21 views
1

私はAndroidアプリケーションのユーザー設定として3つの文字列を永久に保存しようとしています。これらの3つの文字列は、URL、ユーザー名、およびパスワードです。私はSharedPreferencesを本当に理解していないので、内部ファイルストレージを使用しようとしました。ファイルから3つの文字列を取得できません。実行時エラーが発生します。おそらく間違ってコード化されていることは分かっていますが、私はデータストレージを理解するためにAndroidで十分に堪能ではありません。誰かが私を助けてくれますか?内部ストレージを使用して資格情報を保存する

環境活動:私は資格情報を取得しようとしていたに

package com.amritayalur.mypowerschool; 



import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 



public class MyPowerSchoolActivity extends Activity { 
Button buttonSubmit; 
TextView textViewTitle; 
TextView textViewDesc; 
EditText editTextURL, editTextUser, editTextPass; 
FileOutputStream fos; 
String url = ""; 
String FILENAME = "InternalStrings"; 
String str; 
String username; 
String password; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    buttonSubmit = (Button) findViewById(R.id.buttonSubmit); 
    textViewTitle = (TextView) findViewById(R.id.textViewTitle); 
    textViewDesc = (TextView) findViewById(R.id.textViewDesc); 

    editTextURL = (EditText) findViewById(R.id.editTextURL); 
    editTextUser = (EditText) findViewById(R.id.editTextUser); 
    editTextPass = (EditText) findViewById(R.id.editTextPass); 
    //Start TextView 
    textViewTitle.setText("MyPowerSchool"); 
    try { 
     fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    //button listener 
    buttonSubmit.setOnClickListener(new View.OnClickListener() { 

     @Override 
      public void onClick(View v) 
      { 
       if ( (!editTextURL.getText().toString().equals("")) && (
!editTextUser.getText().toString().equals("")) && (
!editTextPass.getText().toString().equals(""))) 
       { 
        url = editTextURL.getText().toString(); 
        username = editTextUser.getText().toString(); 
        password = editTextPass.getText().toString(); 
        //Saving data via File 
        /* File f = new File(FILENAME); 
        try { 
         fos = new FileOutputStream(f); 
         fos.close(); 
        } catch (FileNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
         */ 
        try { 
        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 

         fos.write(url.getBytes()); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        try { 
         fos.write(username.getBytes()); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        try { 
         fos.write(password.getBytes()); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        try { 
        fos.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 



        // TODO Auto-generated method stub 
        Intent i = new Intent(MyPowerSchoolActivity.this, 
creds.class);  
        //i.putExtra("pschoolurl", editTextURL.getText().toString()); 
        //i.putExtra("pschooluser", editTextUser.getText().toString()); 
        //i.putExtra("pschoolpass", editTextPass.getText().toString()); 
        // get the text here 
        final int result = 1; 
        startActivityForResult(i, result); 
       } 
      }; 




});}} 

活動:

package com.amritayalur.mypowerschool; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.TextView; 



public class creds extends Activity { 

String url; 
String username; 
String password; 
TextView TextViewTest; 

    String FILENAME = "InternalStrings"; 
; 
/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second); 




    Intent intent = getIntent(); 
    //String url = intent.getExtras().getString("pschoolurl"); 
    //String username = intent.getExtras().getString("pschooluser"); 
    //String password = intent.getExtras().getString("pschoolpass"); 
    String collected = null; 
    FileInputStream fis = null; 
    try { 
     fis = openFileInput(FILENAME); 
     byte[] dataArray = new byte[fis.available()]; 
     while (fis.read(dataArray) != -1){ 
      collected = new String(dataArray); 

     } 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     try { 
      fis.close(); 
      TextViewTest.setText(collected); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 






} 
} 

コメントしたテキストは、コードのさまざまな側面で周り台無しにしようとしてくれた結果です。

+0

を私はアンドロイドで私をキックオフするためにこれらのチュートリアルを使用していて、彼は何かを持っていることがあります。 http://www.vogella.de/articles/Android/article.html – Welshboy

答えて

4

SharedPreferencesはそれほど難しくありません。

好みに何かを追加するには:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MyActivity.this); //Get the preferences 
Editor edit = prefs.edit(); //Needed to edit the preferences 

edit.putString("name", "myname"); //add a String 
edit.putBoolean("rememberCredentials", true); //add a boolean 

edit.commit(); // save the edits. 

何か読むには:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MyActivity.this); //Get the preferences 
String name = prefs.getString("name", "defaultName"); //get a String 
boolean rememberCredentials = prefs.getBoolean("rememberCredentials", true); //get a boolean. 
//When the key "rememberCredentials" is not present, true is returned. 
+0

SharedPreferencesは素晴らしいですが、電話が盗まれて電話が盗まれた場合のセキュリティの影響については心配しています。技術的には、保存された設定へのアクセス権を得ることができますか? – Knossos

+0

私はファイルに保存すると違いはないと思います。いずれにしても、パスワードを平文で保存したくない場合は、ハッシュなどを使用したいと思うでしょう。 – nhaarman

+0

私は平文でパスワードを保存することを心配していませんが、それは個人的なデータや何かを明らかにするものではありません。環境設定を取得しようとすると、SharedPreferences型のgetStringメソッドが引数(文字列)に適用されません。何かアドバイス?\ – Slicekick

関連する問題