【问题标题】:How do I use parameters in a protected function into another protected function?如何将受保护函数中的参数用于另一个受保护函数?
【发布时间】:2016-08-04 09:19:38
【问题描述】:

我在MainActivityclass 中使用protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } 来使用它的data 作为用户进程的结果,并且我引入了另一个类来显示ProgressDialog pd; ---->>>>

 public class Loading
        extends AsyncTask<Void, Void, Void>
{
    public Loading() {}

    protected Void doInBackground(Void... paramVarArgs)
    {

///////这里有些私有函数需要来自 onActivityResult 的数据值//////// //////////////如何在此处使用该数据值 ///////////// 返回空值; }

    protected void onPostExecute(Void paramVoid)
    {
        super.onPostExecute(paramVoid);
        MainActivity.this.pd.dismiss();

    }

    protected void onPreExecute()
    {
        super.onPreExecute();
        MainActivity.this.pd.setTitle("Loading App....");
        MainActivity.this.pd.setMessage("Please Wait.....");
        MainActivity.this.pd.show();
    }
}

现在我想使用 data 中的参数 protected void onActivityResult(int requestCode, int resultCode, Intent data)protected Void doInBackground(Void... paramVarArgs){} 我怎样才能做到这一点 ?谢谢。

【问题讨论】:

  • 为什么要这样做?你为什么不删除这个 AsyncTask,在 startActivityForResult() 时显示 ProgressDialog 并在有 onActivityResult() 时关闭它?
  • 因为我想调用一些需要该数据的私有函数并且这些函数必须写在 doInbackground() 中,这些函数需要 onActivityResult 参数中的数据值
  • 这些功能需要时间来显示 ProgressDialog pd;为用户直到这些功能的任务完成
  • AsyncTask 用于做少量工作并退出。它不适用于长时间运行的操作,因此尝试向其中传递新数据是不合适的。
  • 为什么不在onActivityResult()中启动AsyncTask?

标签: java android android-studio


【解决方案1】:

我明白了哇

AsyncTask Myasytsk = new AsyncTask() {
@Override
protected Object doInBackground(Object[] params) {
    MainActivity.this.systemWritedo(pathfile);

    return null;
}
         protected void onPostExecute(Object result) {

             MainActivity.this.pd.dismiss();
             MainActivity.this.reboot();

         }

         protected void onPreExecute() {

             MainActivity.this.pd.setTitle("Installation....");
             MainActivity.this.pd.setMessage("Please Wait.....");
             MainActivity.this.pd.show();

         }
};
Myasytsk.execute();

【讨论】:

    【解决方案2】:

    您的 AsyncTask 类应该是这样的。

    public class Loading extends AsyncTask<Void, Void, Void>
    {
          private MainActivity act = null;
    
          //this is constructor
          public Loading(MainActicity _act) {
               this.act = _act;
          }
          protected Void doInBackground(Void... paramVarArgs)
          {
                //your codes
          }
          protected Void onPostExecute(Object result) {
               //your codes
               act.pd.dismiss();
               act.reboot();
          }
    }
    

    您可以在 MainActivity 中使用 AsyncTask 类

    private Loading loadingTask;
    public ProgressDialog pd;    //your progress dialog must be public
    private void DoSomething(){
    
                           //"this" send reference of MainActivity to Loading class
         loadingTask = new LoadingTask(this);
         loadingTask.execute(); 
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-12
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2011-05-30
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多