仅在检查sharedPref中是否存在所需值后才启动方法

时间:2017-11-09 22:12:51

标签: java android logic

Theres编辑文本字段。它必须像这样工作: 1)如果它是空的 - 没有任何事情发生 2)如果用户使用带有JSON对象的HTTP请求放置一些新文本启动TextWatcher的方法。 String的值也将放在共享首选项中 3)如果用户打开活动时,共享首选项已经具有前一个字符串的值,则必须只从该字符串设置文本,并且不要使用HTTP请求启动TextWatcher的方法。 所以有三个条件,只有在字符串的值与共享的pref中不相同的情况下,progrmm才能发出请求。现在它发送请求即使人只是打开应用程序。我想避免错误的请求,只在新的string值之后发出请求。

主要问题:如果文本字段中的值与sharedpref中的值不同,如何启动HTTP请求代码?

P.S。如果你认为我的问题很糟糕。请在说明中告诉我不要让-1请。教新程序员

这是代码

public class MainActivity extends AppCompatActivity {

        AppCompatButton chooseLanguageButton;
        AppCompatButton cleanButton;
        AppCompatEditText translatedTextOutput;
        AppCompatEditText translatedTextInput;
        String translatedInputString;
        RequestQueue requestQueue;
        final String TAG = "myTag";
        String language;

        SharedPreferences mSettings;
        SharedPreferences textReference;
        SharedPreferences translateReference;
        SharedPreferences longLangReference;
        SharedPreferences shortLangReference;
        final String SAVED_TEXT = "text";
        final String SAVED_TRANSLATION = "translation";
        final String LANGUAGE_LONG = "lang_long";
        final String LANGUAGE_SHORT = "lang_short";
        public static final String APP_PREFERENCES = "mysettings";


        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();
                }
                saveText();
            }
        };

        @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);
            int textLength = translatedTextInput.getText().length();
            translatedTextInput.setSelection(textLength);

            translatedTextInput.addTextChangedListener(searchTextWatcher);

            chooseLanguageButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.v(TAG, "in chooseLanguageListener");

                    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);

            if (mSettings.contains(LANGUAGE_LONG)){
                Log.v(TAG, "here");
                chooseLanguageButton.setText(mSettings.getString(LANGUAGE_LONG,""));
            } else {
                Log.v(TAG, "THERE");
                chooseLanguageButton.setText("Choose language");
            }

            if (mSettings.contains(SAVED_TEXT)){
                Log.v(TAG, "here");
                translatedTextInput.setText(mSettings.getString(SAVED_TEXT,""));
            } else {
                Log.v(TAG, "boooooom");

            }

            if (mSettings.contains(SAVED_TRANSLATION)){
                Log.v(TAG, "here in TRANSLATION FIELD" + mSettings.getString(SAVED_TRANSLATION,""));
                translatedTextOutput.setText(mSettings.getString(SAVED_TRANSLATION,""));
            } else {
                Log.v(TAG, "boooooom");
            }

        }

    @Override
    protected void onResume() {
        super.onResume();
        translatedTextInput.post(new Runnable() {
            @Override
            public void run() {
                Selection.setSelection(translatedTextInput, );
            }
        });
    }

    @Override
        protected void onDestroy() {

            super.onDestroy();
            mSettings = null;
        }

        void saveText() {
//            mSettings = getSharedPreferences(SAVED_TEXT, MODE_PRIVATE);
            SharedPreferences.Editor ed = mSettings.edit();
            ed.putString(SAVED_TEXT, translatedTextInput.getText().toString());
            ed.putString(SAVED_TRANSLATION, translatedTextOutput.getText().toString());
            ed.apply();
            Log.v(TAG, "Text saved==========>" + translatedTextInput.getText().toString());
            Toast.makeText(this, "Text saved", Toast.LENGTH_SHORT).show();
        }

        void loadText() {

            textReference = getSharedPreferences(SAVED_TEXT, MODE_PRIVATE);
            translatedTextInput.setText(mSettings.getString(SAVED_TEXT,""));
            translateReference = getSharedPreferences(SAVED_TRANSLATION, MODE_PRIVATE);
            translatedTextOutput.setText(mSettings.getString(SAVED_TRANSLATION,""));
            Log.v(TAG, "IN LOAD TEXT METHOD" + mSettings.getString(SAVED_TEXT,""));
            Log.v(TAG, "IN LOAD TRANSLATION METHOD" + mSettings.getString(SAVED_TRANSLATION,""));
        }


        public void sendJsonRequest() {
            Log.v(TAG, "in sendJsonObject");
            Intent myIntent = getIntent();
//            language = myIntent.getStringExtra("short");
            shortLangReference = getSharedPreferences(LANGUAGE_SHORT, MODE_PRIVATE);
            language = mSettings.getString(LANGUAGE_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);
        }

    }

0 个答案:

没有答案