Получить текст после нажатия кнопки android - PullRequest
1 голос
/ 22 апреля 2020

У меня есть оператор результата, который выполняет два запроса. первый запрос получает текст из редактируемого текста, но не после нажатия кнопки. второй получает кое-что из таблицы в базе данных. как я могу сделать onClickListener для моей кнопки, чтобы он получал текст, после нажатия кнопки ONLY запрос выполняется не всем классом (который содержит мой запрос)

здесь мой код (который сейчас выполняет весь класс)

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        getSupportActionBar().hide();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        connectionClass = new ConnectionClass();
        itemArrayList = new ArrayList<ClassListChat>();
        listView = (ListView) findViewById(R.id.chatlist);
        themsg = (EditText) findViewById(R.id.yourmsg);
        send = (Button) findViewById(R.id.send);


send.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try{
            String editTextData = themsg.getText().toString();
        }
        catch(Exception e) {
            Log.e("ActivityName", "Exception caused by editText " + e.toString());
        }
        new SyncData(editTextData).execute();
    }

});

    }



    private class SyncData extends AsyncTask<String, String, String> {
        String msg;
        ProgressDialog progress;
        String editTextData;


        public void SyncData(String editTextData) {
            this.editTextData = editTextData;
        }
        @Override
        protected void onPreExecute() //Starts the progress dailog
        {
            progress = ProgressDialog.show(ChatActivity.this, "Loading...",
                    "Please Wait...", true);
        }

        @Override
        protected String doInBackground(String... strings)  // Connect to the database, write query and add items to array list
        {
            runOnUiThread(new Runnable() {
                public void run() {


                    try {
                        Connection conn = connectionClass.CONN(); //Connection Object
                        if (conn == null) {
                            success = false;
                            msg = "Sorry something went wrong,Please check your internet connection";
                        } else {
                            // Change below query according to your own database.
                            Date c = Calendar.getInstance().getTime();
                            SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
                            String formattedDate = df.format(c);
                            System.out.println("it isssssssssssssssssssssssssssssssssssssssssaaaaaaaaaaaaaaaaaaaa"+formattedDate);


                            String query = "Insert into CustomerSupportChat values('" + formattedDate + "','" + editTextData + "','Customer','3','"+getIntent().getStringExtra("nameid")+"','1','1') " +
                                    "Select MessageID,MessageDate,MessageText,SenderType,MessageRecieved,MessageReaded,Users_Login_Data.Username,StoresData.StoreEnglishName,StoresData.StoreArabicName FROM " +
                                    "CustomerSupportChat INNER JOIN Users_Login_Data ON " +
                                    "CustomerSupportChat.CustomerID = Users_Login_Data.CustomerID INNER JOIN StoresData ON " +
                                    "CustomerSupportChat.StoreID = StoresData.StoreID Where SenderType = 'Customer'";
                            String query2 =
                                    "Select MessageID,MessageDate,MessageText,SenderType,MessageRecieved,MessageReaded,Users_Login_Data.Username,StoresData.StoreEnglishName,StoresData.StoreArabicName FROM " +
                                    "CustomerSupportChat INNER JOIN Users_Login_Data ON " +
                                    "CustomerSupportChat.CustomerID = Users_Login_Data.CustomerID INNER JOIN StoresData ON " +
                                    "CustomerSupportChat.StoreID = StoresData.StoreID Where SenderType = 'Store'";

                            Statement stmt = conn.createStatement();
                            Statement stmt2 = conn.createStatement();

                            ResultSet rs = stmt.executeQuery(query);
                            ResultSet rs2 = stmt2.executeQuery(query2);


                            if (rs != null && rs2!= null) // if resultset not null, I add items to itemArraylist using class created
                            {
                                while (rs.next() && rs2.next()) {

                                    try {
                                        itemArrayList.add(new ClassListChat(rs.getString("MessageDate"),rs.getString("MessageText") ,rs.getString("SenderType"),rs2.getString("MessageText")));
                                        System.out.println("THEY AREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE "+rs.getString("MessageDate")+ " " +rs.getString("MessageText")+ " " + rs.getString("SenderType")+ " " + rs2.getString("MessageText"));
                                        themsg.setText("");
                                    } catch (Exception ex) {
                                        ex.printStackTrace();
                                    }
                                }

                                msg = "Found";
                                success = true;
                            } else {
                                msg = "No Data found!";
                                success = false;
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Writer writer = new StringWriter();
                        e.printStackTrace(new PrintWriter(writer));
                        msg = writer.toString();
                        Log.d("Error", writer.toString());
                        success = false;
                    }

                }
            });
            return msg;
        }

текст редактирования, из которого я хочу получить текст: themsg.

РЕДАКТИРОВАТЬ: У меня есть обновил мой код, но теперь он показывает мне ошибку на втором editTextData в OnClickListener.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Это выглядит правильно. Вам, вероятно, нужно выполнить некоторую отладку, чтобы убедиться, что вы получаете данные. Вы можете войти Я добавлю сообщение журнала. Проверьте журнал, если сообщение печатается при нажатии на кнопку. Я также добавил отделку, чтобы удалить пробел. Кроме того, прокомментируйте строку, где вы вызываете SyncData, чтобы убедиться, что проблема не в этом.

Между тем для вашего последующего проекта вы можете рассмотреть возможность использования архитектуры Room Database и AppExecutor с Java и сопрограмм, если вы Kotlin используется для управления асинхронной задачей.

send.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try{
            String editTextData = themsg.getText().toString().trim();
            Log.d("Activityname", editTextData)
        }
        catch(Exception e) {
            Log.e("ActivityName", "Exception caused by editText " + e.toString());
        }
        //new SyncData(editTextData).execute();
    }

});

0 голосов
/ 22 апреля 2020

Мне кажется, вы все делаете правильно:

send.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
      try{
        String editTextData = themsg.getText().toString();
      }
      catch(Exception e) {
        Log.e("ActivityName", "Exception caused by editText " + e.toString());
      }
      new SyncData(editTextData).execute();
  }
});

Также измените определение функции SyncData для принятия этого значения editText, задав свойство поля и инициализировав его через конструктор SyncData.

private class SyncData extends AsyncTask<String, String, String> {
    String msg;
    ProgressDialog progress;
    Strind editTextData;

    public void SyncData(String editTextData) {
      this.editTextData = editTextData;
    }

таким образом, вы можете передать любое значение editText, удерживаемое в момент нажатия кнопки, и передать его в AsyncTask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...