2017-02-10 1 views
1

Я очень новичок в android и не могу получить результат из базы данных в TextView на экране. В настоящий момент мое приложение возвращает сообщение после нажатия кнопки. У меня есть два элемента TextView на экране txtViewBegin и txtViewEind. От mySql (через php) я получаю строку вроде этого 22-02-2014 24-05-2017, которую я разделил на массив Strings (.split(" ")).Как установить результат BackgroundWorker в TextView

Могу ли я использовать 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); 

} 
} 

ответ

2

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 

} 
Смежные вопросы