Заранее благодарен.
Есть MainActivity
(первое) и LanguageActivity
(второе). В первом активити есть два поля куда нужно вставлять значение после закрытия приложения. Первое поле берет данные, которые сохраняются в sharedReferences из первого активити, второе поле должно брать данные из поля, которые получаются в случае нажатия на ячейку из списка второго активити.
Первое работает нормально, второе почему то показывает null
. Хотя оформление размещения данных в references написано так же и без ошибок. Не могу найти ошибку.
public class MainActivity extends AppCompatActivity {
public static final String APP_PREFERENCES = "mysettings";
AppCompatButton chooseLanguageButton;
AppCompatButton cleanButton;
AppCompatEditText translatedTextOutput;
AppCompatEditText translatedTextInput;
String translatedInputString;
RequestQueue requestQueue;
SharedPreferences mSettings;
final String SAVED_TEXT = "saved_text";
final String SAVED_LANGUAGE = "saved_language";
final String TAG = "myTag";
String language;
private ProgressBar progressBar;
private Timer timer;
private TextWatcher searchTextWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
Log.v(TAG, "in afterTextChanged");
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (translatedTextInput.getText().length() != 0){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
requestQueue = Volley.newRequestQueue(MainActivity.this);
sendJsonRequest();
}
});
}
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(translatedTextInput.getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}, 600);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (timer != null) {
timer.cancel();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.v(TAG, "in Oncreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chooseLanguageButton = (AppCompatButton) findViewById(R.id.choose_language_button);
cleanButton = (AppCompatButton) findViewById(R.id.clean_button);
translatedTextOutput = (AppCompatEditText) findViewById(R.id.translated_text_field);
translatedTextInput = (AppCompatEditText) findViewById(R.id.translation_input_edit);
translatedTextInput.addTextChangedListener(searchTextWatcher);
chooseLanguageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.v(TAG, "in chooseLanguageListener");
saveText();
Intent intent = new Intent(MainActivity.this, ChooseLanguageList.class);
startActivity(intent);
}
});
cleanButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
translatedTextInput.setText("");
translatedTextOutput.setText("");
}
});
mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
loadText();
}
@Override
protected void onDestroy() {
super.onDestroy();
mSettings = null;
}
void saveText() {
Log.v(TAG, "in saveText");
mSettings = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor ed = mSettings.edit();
ed.putString(SAVED_TEXT, translatedTextInput.getText().toString());
ed.apply();
Toast.makeText(this, "Text saved", Toast.LENGTH_SHORT).show();
}
void loadText() {
Log.v(TAG, "in loadText");
mSettings = getPreferences(MODE_PRIVATE);
String savedText = mSettings.getString(SAVED_TEXT, "");
translatedTextInput.setText(savedText);
String savedLanguage = mSettings.getString(SAVED_LANGUAGE, "");
Log.v(TAG, "Language in loadText PF ==================" + savedLanguage.toString());
language = savedLanguage.toString();
Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show();
}
public void sendJsonRequest() {
Log.v(TAG, "in sendJsonObject");
Intent myIntent = getIntent();
language = myIntent.getStringExtra("short");
Log.v(getClass().getSimpleName(), "language short = " + language);
translatedInputString = translatedTextInput.getText().toString().replace(" ","+");
String url = String.format(getApplicationContext().getResources().getString(R.string.request_template),
String.format(getApplicationContext().getResources().getString(R.string.query_Template), translatedInputString, language ));
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.v(TAG, "Inside OnResponse" + response.toString());
JSONArray results = null;
try {
results = response.getJSONObject("data").getJSONArray("translations");
for (int i=0,j=results.length();i<j;i++) {
String webTitle = results.getJSONObject(i).getString("translatedText");
translatedTextOutput.setText(webTitle);
}
} catch (JSONException e) {
Log.e(TAG, "Error :" + e);
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof NetworkError) {
Log.e(TAG, "NetworkError");
} else if (error instanceof ServerError) {
Log.e(TAG, "The server could not be found. Please try again after some time!!");
} else if (error instanceof AuthFailureError) {
Log.e(TAG, "AuthFailureError");
} else if (error instanceof ParseError) {
Log.e(TAG, "Parsing error! Please try again after some time!!");
} else if (error instanceof NoConnectionError) {
Log.e(TAG, "NoConnectionError!");
} else if (error instanceof TimeoutError) {
Log.e(TAG, "Connection TimeOut! Please check your internet connection.");
}
}
});
requestQueue.add(jsObjRequest);
}
}
И самое главное второе активити
public class ChooseLanguageList extends AppCompatActivity{
private ListView languagesListView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.choose_language_page);
languagesListView = (ListView) findViewById(R.id.language_list);
final LanguagesAdapter languagesAdapter = new LanguagesAdapter(this, initData());
languagesListView.setAdapter(languagesAdapter);
languagesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent myIntent = new Intent(view.getContext(), MainActivity.class);
String shortLanguage = initData().get(i).getShortNameLanguage();
String longLanguage = initData().get(i).getFullNameLanguage();
myIntent.putExtra("long", longLanguage);
myIntent.putExtra("short", shortLanguage);
Activity myActivity=(Activity)(view.getContext());
SharedPreferences mSettings = myActivity.getSharedPreferences("mysettings", MODE_PRIVATE);
SharedPreferences.Editor ed = mSettings.edit();
Log.v("Tag", "Inside put ref = " + shortLanguage);
ed.putString("language", shortLanguage);
ed.apply();
startActivity(myIntent);
}
});
}
Для получения SharedPreferences
Вы используете два метода:
getPreferences(...)
getSharedPreferences(...)
В первой активити Вы используете getPreferences(...)
, а во второй --
getSharedPreferences(...)
.
Первый метод возвращает SharedPreferences
уровня активити, второй -- SharedPreferences
уровня приложения.
В первой активити Вы сохраняете и получаете данные уровня активити, а во второй -- сохраняете на уровне приложения, отсюда и возникает Ваша проблема.
Чтобы данные были доступны из обеих активити, их необходимо сохранять в SharedPreferences
уровня приложения.
Замените все вызовы getPreferences(...)
на getSharedPreferences(...)
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне нужно получить таймзону клиента, для того, чтобы передать её в параметр компонента на страницеСтраница работает с бином, из которого...
Коллеги, подскажите: имеется строка с датой вида: Fri Oct 06 15:54:33 MSK 2017 пытаюсь её превратить в javasql