Сохранять и извлекать глобальные переменные функциональным способом. Чтобы проверить, убедитесь, что на странице есть элементы Textview, раскомментируйте две строки в коде и запустите. Затем прокомментируйте две строки и запустите. Здесь идентификатор TextView - это имя пользователя и пароль.
В каждом классе, где вы хотите его использовать, добавьте эти две процедуры в конец. Я бы хотел, чтобы эта процедура была глобальной процедурой, но не знаю, как это сделать. Это работает.
Варианты доступны везде. Он хранит переменные в «MyFile». Вы можете изменить его на своем пути.
Вы вызываете его с помощью
storeSession("username","frans");
storeSession("password","!2#4%");***
, имя пользователя переменной будет заполнено «frans» и пароль с «! 2 # 4%». Даже после перезапуска они доступны.
и вы извлекаете его с помощью
password.setText(getSession(("password")));
usernames.setText(getSession(("username")));
ниже всего кода моей grid.java
package nl.yentel.yenteldb2;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class Grid extends AppCompatActivity {
private TextView usernames;
private TextView password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
***// storeSession("username","frans.eilering@gmail.com");
//storeSession("password","mijn wachtwoord");***
password = (TextView) findViewById(R.id.password);
password.setText(getSession(("password")));
usernames=(TextView) findViewById(R.id.username);
usernames.setText(getSession(("username")));
}
public void storeSession(String key, String waarde) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString(key, waarde);
editor.commit();
}
public String getSession(String key) {
//http://androidexample.com/Android_SharedPreferences_Basics/index.php?view=article_discription&aid=126&aaid=146
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
String output = pref.getString(key, null);
return output;
}
}
ниже вы найдете элементы textview
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="usernames"
android:id="@+id/username"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true"
android:layout_marginTop="39dp"
android:hint="hier komt de username" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="password"
android:id="@+id/password"
android:layout_below="@+id/user"
android:layout_alignParentStart="true"
android:hint="hier komt het wachtwoord" />
Проблема со сном постоянной суммы 1 секунды после каждой передачи состоит в том, что у Вас будет изменчивая производительность сети.
BandwidthMaxThreshold, которому Позволяют, быть желаемым порогом пропускной способности.
TransferRate, которому Позволяют, быть текущей скоростью передачи соединения.
Тогда...
при обнаружении TransferRate> BandwidthMaxThreshold тогда Вы делаете SleepTime = 1 + SleepTime * 1.02 (время сна увеличения на 2%)
Прежде или после того, как каждая сетевая операция делает Сон (SleepTime)
при обнаружении TransferRate, намного ниже, чем BandwidthMaxThreshold, можно уменьшить SleepTime. Кроме того, Вы могли просто затухать/уменьшать свой SleepTime со временем всегда. В конечном счете Ваш SleepTime достигнет 0 снова.
Вместо увеличения 2% Вы могли также сделать увеличение большей суммой линейно различия между TransferRate - BandwidthMaxThreshold.
Это решение хорошо, потому что у Вас не будет снов, если сеть пользователя уже будет не настолько высоко, как Вы хотели бы.
Лучший способ состоял бы в том, чтобы использовать маркерный блок .
Передача только, когда у Вас есть достаточно маркеров для заполнения пакета (1 460 байтов были бы хорошей суммой), или если Вы - получить сторона, читала из сокета только, когда у Вас есть достаточно маркеров; немного простой математики скажет Вам, сколько времени необходимо ожидать, прежде чем у Вас будет достаточно маркеров, таким образом, можно спать, что количество времени (стараться вычислить то, для какого количества маркеров полученный тем, насколько Вы на самом деле спали, начиная с большинства операционных систем, можно спать процесс дольше, чем Вы, спросило).
Для управления размером пакетов ограничьте максимальную сумму маркеров, которые Вы можете иметь; хорошая сумма могла быть одной второй ценностью маркеров.
Мне везло с струйка . Это прохладно, потому что это может отрегулировать произвольные приложения пространства пользователя без модификации. Это работает путем предварительно загружения его собственных send/recv функций обертки, которые делают вычисление пропускной способности для Вас.
самый большой недостаток, который я нашел, состоял в том, что трудно скоординировать несколько приложений, что Вы хотите совместно использовать конечную пропускную способность. "сочившийся" помогает, но я нашел, что это усложнило.
Обновление в 2017: это похоже на струйку, перемещенную в https://github.com/mariusae/trickle