2017-02-10 42 views
1

我对android非常陌生,不能从屏幕上的数据库获取结果到TextView。目前我的应用程序在点击一个按钮后返回一条消息。我在屏幕txtViewBegintxtViewEind上有两个TextView元素。从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)在你的BackgroundWorker

public interface DataCallBack{ 
    void onDataReceived(String s); 
} 

2)实施创造回调的interface回调界面在你的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 

}