2013-01-17 29 views
0

對不起,造成你們很多麻煩。應用程序嘗試讀取文件之前,它甚至在歡迎屏幕上創建

我的應用程序現已完成。現在唯一的問題是,我的第一次顯示歡迎屏幕是新文件將被創建的地方。這個歡迎屏幕的sharedpref位於正在讀取文件的main_activity中。

因此,甚至在創建文件之前就試圖讀取文件!那麼它將會是什麼解決方案?

代碼主要活動:

package com.omm.easybalancerecharge; 

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

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    SharedPreferences mPrefs; 
    final String welcomeScreenShownPref = "welcomeScreenShown"; 

    EditText num; 
    Button ch; 
    TelephonyManager operator; 
    String opname; 
    TextView status; 
    TextView setID; 
    String myID; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     initialize(); 
     setstatus(); 
     setIDNO(); 
//Checks and displays Welcome Screen 
     mPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
     Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, 
       false); 

     if (!welcomeScreenShown) { 
      Intent welcome = new Intent("android.intent.action.WELCOME"); 
      startActivity(welcome); 
      SharedPreferences.Editor editor = mPrefs.edit(); 
      editor.putBoolean(welcomeScreenShownPref, true); 
      editor.commit(); 
     } 
    //Reading Data from the file to be created at welcome screen for the first time. 
     myID = readData(); 
     recharge(); 
    } 

    //readData method 
    protected String readData() { 
     // TODO Auto-generated method stub 
     String ret = ""; 
     try { 
      FileInputStream fIN = openFileInput("iqid"); 
      InputStreamReader in = new InputStreamReader(fIN); 
      BufferedReader br = new BufferedReader(in); 
      ret = br.readLine(); 
     } catch (FileNotFoundException e) { 
      Log.e("ID ACTIVITY", "File Not Found"); 
     } catch (IOException e) { 
      Log.e("ID ACTIVITY", "Cannot Read From File"); 
     } 
     return ret; 
    } 

} 

代碼首次歡迎屏幕:

package com.omm.easybalancerecharge; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class FirstTime extends Activity { 

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

     final EditText ID = (EditText) findViewById(R.id.IDNO); 
     Button save = (Button) findViewById(R.id.sButton); 
     save.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       try { 
        String myFile = ID.getText().toString(); 
        FileOutputStream fOS = openFileOutput("iqid", Context.MODE_PRIVATE); 
        fOS.write(myFile.getBytes()); 
        Toast.makeText(getBaseContext(), "ID Saved", 
          Toast.LENGTH_SHORT).show(); 
       } catch (IOException e) { 
        Log.e("Exception", "Save Failed"); 
       } finally { 
        finish(); 
       } 
      } 
     }); 
    } 
} 

這個問題是防止我的應用程序沒有任何功能界別成功運行的唯一的事情。 所有權限都是在清單中設置的。

編輯:而且很顯然的文件不被創建在所有:/

回答

1

您應該使用startActivityForResult:

Intent i = new Intent(this, FirstTime.class); 
startActivityForResult(i, 1); 

在你FirstTime設置要回返回MainActivity數據如果你不想返回,請不要設置任何內容。

例如:在FirstTime如果要發回數據

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(RESULT_OK,returnIntent);  
finish(); 

,如果你不想返回數據

Intent returnIntent = new Intent(); 
setResult(RESULT_CANCELED, returnIntent);   
finish(); 
在MainActivity類別寫入以下爲onActivityResult代碼

NOW()方法

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (resultCode == Activity.RESULT_OK) { 
    //Reading Data from the file to be created at welcome screen for the first time. 
    myID = readData(); 
    recharge(); 

這應該是訣竅。

+0

感謝您的回覆。如果可以的話,請把你的建議和我的代碼放在應該放置的地方。此外,該文件根本沒有被創建。 –

+0

我沒有Eclipse在我面前,但這是相當瑣碎的理解... startActivityForResult是在你的MainActivity,取代startActivity ....然後使用onActivityResult ... –

+0

好吧,我實現了你的建議,這有助於在方式,但當我點擊充值按鈕調用充電();方法,它FCs。此外,如果該應用程序第二次運行,ID號讀取也消失,因爲沒有歡迎屏幕,因此沒有onactivity結果 –

相關問題