2017-09-15 4 views
0

Est-il possible d'insérer des variables non statiques dans une méthode statique? Je suis en train de prendre du texte à partir Modifier le texte à insérer une valeur à une méthode de mise à jour de lot de feuille de calcul API.I je essaie d'insérer ces variablesComment insérer des variables non statiques dans une méthode statique en Java?

private Editable sFName; 
    private Editable sLName; 
    private String sClass; 
    private Editable sEmail; 
    private String sSection; 
    private String sId; 

mais je suis incapable de les insérer car ils sont des variables non statiques .

est Ci-dessous le code complet

public class details extends Activity 
    implements EasyPermissions.PermissionCallbacks { 

    static final int REQUEST_ACCOUNT_PICKER = 1000; 
    static final int REQUEST_AUTHORIZATION = 1001; 
    static final int REQUEST_GOOGLE_PLAY_SERVICES = 1002; 
    static final int REQUEST_PERMISSION_GET_ACCOUNTS = 1003; 
    private static final String BUTTON_TEXT = "Call Google Sheets API"; 
    private static final String PREF_ACCOUNT_NAME = "accountName"; 
    private static final String[] SCOPES = { 
     SheetsScopes.SPREADSHEETS_READONLY 
    }; 
    public Editable sPhone; 
    GoogleAccountCredential mCredential; 
    ProgressDialog mProgress; 
    private Editable sFName; 
    private Editable sLName; 
    private String sClass; 
    private Editable sEmail; 
    private String sSection; 
    private String sId; 
    private TextView mOutputText; 

    public static List < List <Object>> getData() { 


     List <Object> data1 = new ArrayList <Object>(); 


     data1.add(sFName); 
     data1.add(sLName); 
     data1.add(sClass); 
     data1.add(sSection); 
     data1.add(sEmail); 
     data1.add(sPhone); 


     List < List <Object>> data = new ArrayList < List <Object>>(); 
     data.add(data1); 

     return data; 
    } 

    /** 
     * Create the main activity. 
     * 
     * @param savedInstanceState previously saved instance data. 
     */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.detaillay); 

     LinearLayout activityLayout = (LinearLayout) findViewById(R.id.mLayout); 

     LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT, 
     LinearLayout.LayoutParams.MATCH_PARENT); 
     activityLayout.setLayoutParams(lp); 
     activityLayout.setOrientation(LinearLayout.VERTICAL); 
     activityLayout.setPadding(16, 16, 16, 16); 

     ViewGroup.LayoutParams tlp = new ViewGroup.LayoutParams(
     ViewGroup.LayoutParams.WRAP_CONTENT, 
     ViewGroup.LayoutParams.WRAP_CONTENT); 


     mOutputText = new TextView(this); 
     mOutputText.setLayoutParams(tlp); 
     mOutputText.setPadding(16, 16, 16, 16); 
     mOutputText.setVerticalScrollBarEnabled(true); 
     mOutputText.setMovementMethod(new ScrollingMovementMethod()); 
     mOutputText.setText(
     "Click the \'" + BUTTON_TEXT + "\' button to test the API."); 
     activityLayout.addView(mOutputText); 

     mProgress = new ProgressDialog(this); 
     mProgress.setMessage("Calling Google Sheets API ..."); 

     setContentView(activityLayout); 

     // Initialize credentials and service object. 
     mCredential = GoogleAccountCredential.usingOAuth2(
     getApplicationContext(), Arrays.asList(SCOPES)) 
     .setBackOff(new ExponentialBackOff()); 


    } 

    /** 
     * Attempt to call the API, after verifying that all the preconditions are 
     * satisfied. The preconditions are: Google Play Services installed, an 
     * account was selected and the device currently has online access. If any 
     * of the preconditions are not satisfied, the app will prompt the user as 
     * appropriate. 
     */ 
    private void getResultsFromApi() { 
     if (!isGooglePlayServicesAvailable()) { 
     acquireGooglePlayServices(); 
     } else if (mCredential.getSelectedAccountName() == null) { 
     chooseAccount(); 
     } else if (!isDeviceOnline()) { 
     mOutputText.setText("No network connection available."); 
     } else { 
     new MakeRequestTask(mCredential).execute(); 
     } 
    } 

    /** 
     * Attempts to set the account used with the API credentials. If an account 
     * name was previously saved it will use that one; otherwise an account 
     * picker dialog will be shown to the user. Note that the setting the 
     * account to use with the credentials object requires the app to have the 
     * GET_ACCOUNTS permission, which is requested here if it is not already 
     * present. The AfterPermissionGranted annotation indicates that this 
     * function will be rerun automatically whenever the GET_ACCOUNTS permission 
     * is granted. 
     */ 
    @AfterPermissionGranted(REQUEST_PERMISSION_GET_ACCOUNTS) 
    private void chooseAccount() { 
     if (EasyPermissions.hasPermissions(
     this, Manifest.permission.GET_ACCOUNTS)) { 
     String accountName = getPreferences(Context.MODE_PRIVATE) 
     .getString(PREF_ACCOUNT_NAME, null); 
     if (accountName != null) { 
     mCredential.setSelectedAccountName(accountName); 
     getResultsFromApi(); 
     } else { 
     // Start a dialog from which the user can choose an account 
     startActivityForResult(
     mCredential.newChooseAccountIntent(), 
     REQUEST_ACCOUNT_PICKER); 
     } 
     } else { 
     // Request the GET_ACCOUNTS permission via a user dialog 
     EasyPermissions.requestPermissions(
     this, 
     "This app needs to access your Google account (via Contacts).", 
     REQUEST_PERMISSION_GET_ACCOUNTS, 
     Manifest.permission.GET_ACCOUNTS); 
     } 
    } 

    /** 
     * Called when an activity launched here (specifically, AccountPicker 
     * and authorization) exits, giving you the requestCode you started it with, 
     * the resultCode it returned, and any additional data from it. 
     * 
     * @param requestCode code indicating which activity result is incoming. 
     * @param resultCode code indicating the result of the incoming 
     *     activity result. 
     * @param data  Intent (containing result data) returned by incoming 
     *     activity result. 
     */ 
    @Override 
    protected void onActivityResult(
     int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
     case REQUEST_GOOGLE_PLAY_SERVICES: 
     if (resultCode != RESULT_OK) { 
     mOutputText.setText(
      "This app requires Google Play Services. Please install " + 
      "Google Play Services on your device and relaunch this app."); 
     } else { 
     getResultsFromApi(); 
     } 
     break; 
     case REQUEST_ACCOUNT_PICKER: 
     if (resultCode == RESULT_OK && data != null && 
     data.getExtras() != null) { 
     String accountName = 
      data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); 
     if (accountName != null) { 
      SharedPreferences settings = 
      getPreferences(Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putString(PREF_ACCOUNT_NAME, accountName); 
      editor.apply(); 
      mCredential.setSelectedAccountName(accountName); 
      getResultsFromApi(); 
     } 
     } 
     break; 
     case REQUEST_AUTHORIZATION: 
     if (resultCode == RESULT_OK) { 
     getResultsFromApi(); 
     } 
     break; 
     } 
    } 

    /** 
     * Respond to requests for permissions at runtime for API 23 and above. 
     * 
     * @param requestCode The request code passed in 
     *      requestPermissions(android.app.Activity, String, int, String[]) 
     * @param permissions The requested permissions. Never null. 
     * @param grantResults The grant results for the corresponding permissions 
     *      which is either PERMISSION_GRANTED or PERMISSION_DENIED. Never null. 
     */ 
    @Override 
    public void onRequestPermissionsResult(int requestCode, 
     @NonNull String[] permissions, 
     @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     EasyPermissions.onRequestPermissionsResult(
     requestCode, permissions, grantResults, this); 
    } 

    /** 
     * Callback for when a permission is granted using the EasyPermissions 
     * library. 
     * 
     * @param requestCode The request code associated with the requested 
     *     permission 
     * @param list  The requested permission list. Never null. 
     */ 
    @Override 
    public void onPermissionsGranted(int requestCode, List <String> list) { 
     // Do nothing. 
    } 

    /** 
     * Callback for when a permission is denied using the EasyPermissions 
     * library. 
     * 
     * @param requestCode The request code associated with the requested 
     *     permission 
     * @param list  The requested permission list. Never null. 
     */ 
    @Override 
    public void onPermissionsDenied(int requestCode, List <String> list) { 
     // Do nothing. 
    } 

    /** 
     * Checks whether the device currently has a network connection. 
     * 
     * @return true if the device has a network connection, false otherwise. 
     */ 
    private boolean isDeviceOnline() { 
     ConnectivityManager connMgr = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
     return (networkInfo != null && networkInfo.isConnected()); 
    } 

    /** 
     * Check that Google Play services APK is installed and up to date. 
     * 
     * @return true if Google Play Services is available and up to 
     * date on this device; false otherwise. 
     */ 
    private boolean isGooglePlayServicesAvailable() { 
     GoogleApiAvailability apiAvailability = 
     GoogleApiAvailability.getInstance(); 
     final int connectionStatusCode = 
     apiAvailability.isGooglePlayServicesAvailable(this); 
     Log.v("details", "Success"); 
     return connectionStatusCode == ConnectionResult.SUCCESS; 

    } 

    /** 
     * Attempt to resolve a missing, out-of-date, invalid or disabled Google 
     * Play Services installation via a user dialog, if possible. 
     */ 
    private void acquireGooglePlayServices() { 
     GoogleApiAvailability apiAvailability = 
     GoogleApiAvailability.getInstance(); 
     final int connectionStatusCode = 
     apiAvailability.isGooglePlayServicesAvailable(this); 
     if (apiAvailability.isUserResolvableError(connectionStatusCode)) { 
     showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode); 
     } 
    } 

    /** 
     * Display an error dialog showing that Google Play Services is missing 
     * or out of date. 
     * 
     * @param connectionStatusCode code describing the presence (or lack of) 
     *        Google Play Services on this device. 
     */ 
    void showGooglePlayServicesAvailabilityErrorDialog(
     final int connectionStatusCode) { 
     GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); 
     Dialog dialog = apiAvailability.getErrorDialog(
     details.this, 
     connectionStatusCode, 
     REQUEST_GOOGLE_PLAY_SERVICES); 
     dialog.show(); 
    } 

    private void Go(List <String> output) { 
     mProgress.hide(); 
     if (output == null || output.size() == 0) { 
     mOutputText.setText("No results returned."); 
     } else { 
     output.add(0, "Data retrieved using the Google Sheets API:"); 
     mOutputText.setText(TextUtils.join("\n", output)); 
     Log.v("details", "Wofdad"); 

     } 
    } 

    public void onClick2(View v) { 

     mOutputText.setText(""); 
     getResultsFromApi(); 


    } 

    public void submitInfo(View view) { 

     EditText fName = (EditText) findViewById(R.id.Student_FName); 
     EditText lName = (EditText) findViewById(R.id.Student_LName); 
     Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); 
     Spinner spinner2 = (Spinner) findViewById(R.id.spinner2); 
     EditText Email = (EditText) findViewById(R.id.email_address); 
     EditText Phone = (EditText) findViewById(R.id.Phone_no); 


     sPhone = Phone.getText(); 
     sFName = fName.getText(); 
     sLName = lName.getText(); 
     sClass = String.valueOf(spinner1.getSelectedItem()); 
     sEmail = Email.getText(); 
     sSection = String.valueOf(spinner2.getSelectedItem()); 

     sId = new StringBuilder(sFName.charAt(0)).append(sLName.charAt(0)).append(sClass.charAt(0)).append(sSection.charAt(0)).toString(); 
     mOutputText.setText(""); 
     getResultsFromApi(); 


    } 

    /** 
     * An asynchronous task that handles the Google Sheets API call. 
     * Placing the API calls in their own task ensures the UI stays responsive. 
     */ 
    private class MakeRequestTask extends AsyncTask < Void, Void, List <String>> { 
     private com.google.api.services.sheets.v4.Sheets mService = null; 
     private Exception mLastError = null; 

     MakeRequestTask(GoogleAccountCredential credential) { 
     HttpTransport transport = AndroidHttp.newCompatibleTransport(); 
     JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 
     mService = new com.google.api.services.sheets.v4.Sheets.Builder(
     transport, jsonFactory, credential) 
     .setApplicationName("Google Sheets API Android Quickstart") 
     .build(); 
     } 

     /** 
     * Background task to call Google Sheets API. 
     * 
     * @param params no parameters needed for this task. 
     */ 
     @Override 
     protected List <String> doInBackground(Void...params) { 
     try { 
     return getDataFromApi(); 
     } catch (Exception e) { 
     mLastError = e; 
     cancel(true); 
     return null; 
     } 
     } 

     /** 
     * Fetch a list of names and majors of students in a sample spreadsheet: 
     * https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit 
     * 
     * @return List of names and majors 
     * @throws IOException 
     */ 
     private List <String> getDataFromApi() throws IOException { 
     String spreadsheetId = "1_sidOscZwfzcs8VaHk4UT5NVUEXGvq9VdDxKDh_xZFU"; 
     int a = 2; 
     int sNo = 0; 
     String check = null; 
     String range = "Class Data!".concat("A" + a++ + ":B"); 
     List < List <Object>> arrData = getData(); 

     ValueRange oRange = new ValueRange(); 
     oRange.setRange(range); // I NEED THE NUMBER OF THE LAST ROW 
     oRange.setValues(arrData); 


     List <ValueRange> oList = new ArrayList < >(); 
     oList.add(oRange); 


     BatchUpdateValuesRequest oRequest = new BatchUpdateValuesRequest(); 
     oRequest.setValueInputOption("RAW"); 
     oRequest.setData(oList); 


     List <String> results = new ArrayList <String>(); 
     ValueRange response = this.mService.spreadsheets().values() 
     .get(spreadsheetId, range) 
     .execute(); 
     List < List <Object>> values = response.getValues(); 
     if (values != null) { 
     Log.v("MainActivity", "Wofdad"); 

     results.add("Name, Major"); 


     for (List row: values) { 


     String Str1 = String.valueOf(row.get(0)); 

     if (Str1.contains("0")) { 
      Log.v("if", Str1); 
      Log.v("if", range); 

      break; 
     } 

     if (!Str1.contains(check.concat(sId + String.valueOf(sNo)))) { 
      sId.concat(String.valueOf(sNo)); 
     } 
     sNo++; 


     range = "Class Data!".concat("A" + a++ + ":B"); 
     Log.v("for", range); 


     } 

     } 
     oRange.setRange(range); // I NEED THE NUMBER OF THE LAST ROW 
     BatchUpdateValuesResponse oResp1 = mService.spreadsheets().values().batchUpdate(spreadsheetId, oRequest).execute(); 

     return results; 
     } 


     @Override 
     protected void onPreExecute() { 
     mOutputText.setText(""); 
     mProgress.show(); 
     Log.v("details", "Worked"); 


     } 

     @Override 
     protected void onPostExecute(List <String> output) { 
     mProgress.hide(); 
     if (output == null || output.size() == 0) { 
     mOutputText.setText("No results returned."); 
     Log.v("details", "damn"); 
     } else { 
     output.add(0, "Data retrieved using the Google Sheets API:"); 
     mOutputText.setText(TextUtils.join("\n", output)); 
     Log.v("details", "Wofdad21"); 

     } 
     } 

     @Override 
     protected void onCancelled() { 
     mProgress.hide(); 

     if (mLastError != null) { 
     if (mLastError instanceof GooglePlayServicesAvailabilityIOException) { 
     showGooglePlayServicesAvailabilityErrorDialog(
      ((GooglePlayServicesAvailabilityIOException) mLastError) 
      .getConnectionStatusCode()); 
     } else if (mLastError instanceof UserRecoverableAuthIOException) { 
     startActivityForResult(
      ((UserRecoverableAuthIOException) mLastError).getIntent(), 
      details.REQUEST_AUTHORIZATION); 
     } else { 
     mOutputText.setText("The following error occurred:\n" + mLastError.getMessage()); 
     Log.v("details", "Worked2"); 
     } 
     } else { 
     mOutputText.setText("Request cancelled."); 
     } 
     } 
    } 
    } 

`

Merci à l'avance !!

+0

vous ne pouvez pas faire cela ... –

+0

Que voulez-vous dire par _ "insert" _? Vous pouvez les passer en paramètres, bien sûr. – 1615903

Répondre

0

Vous ne pouvez pas utiliser de variables non statiques dans les méthodes statiques, mais vice versa. Cela a une raison très simple: Des variables non-statiques sont créées à l'intérieur d'un objet. Prenons l'Object Car avec une vitesse variable non statique. Maintenant, vous avez une méthode statique en utilisant la vitesse de la voiture. Pourrait fonctionner correctement dans cet exemple mais laisse créer une autre voiture d'objet. Laquelle des deux variables de vitesse doit être référencée par la méthode statique? Ou vous n'avez peut-être aucun objet de voiture créé, donc il n'y aura pas de variables de vitesse.

Bien sûr, vous pouvez toujours utiliser une variable non statique comme paramètre de méthode. Mais je ne pense pas que ce soit le point ici.