2014-03-05 74 views
0

大家好。這是我的項目。由於我是Java編程的初學者,我嘗試使用不同類型的存儲,現在是內部存儲。我有一個接受用戶名和密碼的屏幕,保存時會保存一個文本文件david.txt。我進入第二個屏幕推送負載,信息從文本文件中提取並填充用戶名和密碼。內部存儲項目

這是主要活動

public static final String TAG = "MainActivity"; 

EditText userName, password; 

//... standard stuff 

    userName = (EditText) findViewById(R.id.userName); 
    password = (EditText) findViewById(R.id.password); 
} 

public void save (View view) 
{ 
    String text1 = userName.getText().toString(); // example: David 
    String text2 = password.getText().toString(); // Example: Vilma123 
    File file=null; 
    text1=text1+" "; // Adds space between username and password 
    FileOutputStream fileOutputStream=null; 

     try { 
     file=getFilesDir(); //Gets directory of stored file 
     fileOutputStream = openFileOutput("david", Context.MODE_PRIVATE); 
     fileOutputStream.write(text1.getBytes()); 
     fileOutputStream.write(text2.getBytes()); 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     Log.d(TAG, e.toString()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Log.d(TAG, e.toString()); 
    } 
    finally{ 
     try { 
      fileOutputStream.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      Log.d(TAG, e.toString()); 
     } 
    } 



    Toast.makeText(this, "Saved successfully"+file+" /david.txt", Toast.LENGTH_LONG).show(); 
} 

代碼這個偉大工程,是我推「轉到B」按鈕,激活了SecondActivity頁面中的「負荷」的方法在屏幕上:見下文

EditText userName, password; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 

    userName = (EditText) findViewById(R.id.editText2); 
    password = (EditText) findViewById(R.id.editText4); 

} 
public void load (View view) 
{ 
     Log.d("david", "starting fileInputStream"); 

     try { 
      FileInputStream fileInputStream =  openFileInput("david.txt"); 
      int read = -1; //-1 indicates file is empty 
      StringBuffer buffer = new StringBuffer(); 

      while ((read = fileInputStream.read())!=-1); 
      { 
       buffer.append((char)read); 
      } 

       Log.d("david", buffer.toString()); 

       String user = buffer.substring(0, buffer.indexOf("")); 

       String pass = buffer.substring(buffer.indexOf("")+1); 

       userName.setText(user); 
       password.setText(pass); 

     fileInputStream.close(); 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    Toast.makeText(this, "Load successful", Toast.LENGTH_SHORT).show(); 
} 

好的,這是它開心的地方。當我按下Load按鈕時,它應該加載我在最後一個屏幕中輸入的用戶名和密碼,但它沒有加載。 此日誌文件有一個0值

Log.d("david", buffer.toString()); 

而其.txt文件中有我放在信息。有人能幫我解決這個問題嗎?我沒有顯示任何錯誤,所有Toasts都應該顯示。

+1

文件是昂貴的過程,使用偏好android有一種叫做偏好小機制數據存儲的機制 – Sush

+0

你可以以加密形式存儲共享偏好的用戶名和密碼,這樣任何人都無法讀取它。 –

+0

@sush請解釋你的想法,我瞭解什麼狀態存儲在共享首選項狀態,然後回顧。所以最後有代碼保存數據到一個確定的地方,並訪問數據使用共享首選項 – user3324600

回答

0
public class Preference 
{ 

    // check for username length 
    public static String getUserName(Context context) 
    { 
    return PreferenceManager.getDefaultSharedPreferences(context).getString(
      "username", ""); 
    } 

    public static boolean setUserName(Context context,String username) 
    { 
    return PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()).edit() 
      .putString("username", username).commit(); 
    } 

// check for password length 
    public static String getPassword(Context context) 
    { 
    return PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()).getString(
      "password", ""); 
    } 


    public static boolean setPassword(Context context,String password) 
    { 
    return PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()).edit() 
      .putString("password", password).commit(); 
    } 


} 
+0

提出的問題旨在尋求在構建問題的背景下進行概念理解,而不是針對實際應用的最佳實踐解決方案。海報試圖使用的機制*應該是可行的,並且可能是對最終目標的練習,它最好由文件填充而不是由偏好填充。 –

+0

謝謝@sush的幫助。偉大的想法,我將執行到該項目。 – user3324600

+0

@chrisStratton你是對的,它只是讓我有使用內部存儲的想法。我是編程新手,我非常感謝大家願意在本網站上提供的所有幫助。真正令人難以置信的是有多少人願意提供幫助。 :-) – user3324600

1

你正在做一個小的錯誤,是在存儲數據使用的是文件名david而你正在使用的文件名david.txt

在MainActivity retriving數據,更改以下行,

fileOutputStream = openFileOutput("david", Context.MODE_PRIVATE); 

這條線,

fileOutputStream = openFileOutput("david.txt", Context.MODE_PRIVATE); 
+0

我編輯你的評論代碼,不幸的是它仍然是一樣的事情。 Log.d(「david」,buffer.toString());仍然沒有顯示數據。我也檢查了模擬器中的david.txt文件,並且內容確實存在。你還認爲它可能是什麼?感謝您的回覆 – user3324600