Я очень новичок в Android и не могу получить результат из базы данных в TextView
на экране. В настоящий момент мое приложение возвращает сообщение после нажатия кнопки. У меня есть два элемента TextView
на экране txtViewBegin
и txtViewEind
. Из mySql
(через php
) я получаю строку вроде этого 22-02-2014 24-05-2017
, которую я разделил на массив Strings (.split(" "))
.
Можно ли использовать setTextView
у рабочего стола (onPostExecute?)
или я должен делать это в своей MainActivity
? Тем не менее, в этом нет ничего. Сожалею.
Вот мой BackgroundWorker
:
public class BackgroundWorker extends AsyncTask<String,Void,String> { Context context; AlertDialog alertDialog; BackgroundWorker(Context ctx){ context = ctx; } @Override protected String doInBackground(String... params) { String type = params[0]; String login_url= "http://*************/****.php"; if(type.equals("Draai")){ try { URL url = new URL(login_url); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(false); httpURLConnection.setDoInput(true); //OutputStream outputStream = httpURLConnection.getOutputStream(); //BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8")); //String post_data = URLEncoder.encode("user_name""UTF-8")// HIER KUN JE VARIABELEN INGEVEN DIE WORDEN GEIMPLEMENTEERD IN HET PHP DOCUMENT //bufferedWriter.write(); //bufferedWriter.flush(); // bufferedWriter.close(); //outputStream.close(); InputStream inputStream = httpURLConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1")); String result =""; String line=""; while ((line=bufferedReader.readLine()) != null){ result += line; } String[] separated = result.split(" "); bufferedReader.close(); inputStream.close(); httpURLConnection.disconnect(); return result; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } } return null; } @Override protected void onPreExecute() { alertDialog = new AlertDialog.Builder(context).create(); alertDialog.setTitle("TijdsDuur"); } @Override protected void onPostExecute(String result) { alertDialog.setMessage(result); alertDialog.show(); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } }
и моя MainActivity
:
public class MainActivity extends AppCompatActivity { TextView ViewBegin, ViewEind; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewBegin = (TextView) findViewById(R.id.txtViewBegin); ViewEind = (TextView) findViewById(R.id.txtViewEind); } public void onDraai(View view){ String type = "Draai"; BackgroundWorker backgroundWorker = new BackgroundWorker(this); backgroundWorker.execute(type); } }
1.) создать interface
для обратного вызова в BackgroundWorker
public interface DataCallBack{ void onDataReceived(String s); }
2.) Внедрите этот интерфейс обратного вызова в свою Activity
public class MainActivity extends AppCompatActivity implements BackgroundWorker.DataCallBack {
3.) Когда задача выполнена, сообщите о своей деятельности с данными для отображения
Ваша MainActivity
будет выглядеть так:
public class MainActivity extends AppCompatActivity implements BackgroundWorker.DataCallBack { TextView ViewBegin, ViewEind; // .....code @Override void onDataReceived(String s){ if(s!=null){ String[] separated = result.split(" "); ViewBegin.setText(separated[0]); ViewEind.setText(separated[1]); } } // .....code }
Класс BackgroundWorker
будет выглядеть так:
public class BackgroundWorker extends AsyncTask<String,Void,String> { Context context; AlertDialog alertDialog; DataCallBack callback; BackgroundWorker(Context ctx){ context = ctx; // initialize the callback reference callback = (DataCallBack) cxt; } public interface DataCallBack{ void onDataReceived(String s); } // .....code @Override protected void onPostExecute(String result) { callback.onDataReceived(result); // ^^^ send data to Activity alertDialog.setMessage(result); alertDialog.show(); } // .....code }