Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免在AsyncTask中传递过多的输入参数?_Java_Android_Object_Android Asynctask - Fatal编程技术网

Java 如何避免在AsyncTask中传递过多的输入参数?

Java 如何避免在AsyncTask中传递过多的输入参数?,java,android,object,android-asynctask,Java,Android,Object,Android Asynctask,我有一个AsyncTask,需要将多个参数传递给构造函数。我知道传递太多参数是不好的做法,最好将方法分成更小的块以避免这种情况,但我不允许破坏方法,因此我唯一的方法是找到一种替代方法,以更好的方式传递参数。在我的AsyncTask中,我创建了一个构造函数 是否可以使用value对象创建一个模型类并传递它们?我需要用接球手和接球手吗 class UpdateAsyncTask extends AsyncTask<Void, Void, Void> { private

我有一个
AsyncTask
,需要将多个参数传递给构造函数。我知道传递太多参数是不好的做法,最好将方法分成更小的块以避免这种情况,但我不允许破坏方法,因此我唯一的方法是找到一种替代方法,以更好的方式传递参数。在我的
AsyncTask
中,我创建了一个构造函数

是否可以使用value对象创建一个模型类并传递它们?我需要用接球手和接球手吗

 class UpdateAsyncTask extends AsyncTask<Void, Void, Void> {

        private String productId;
        int mutationAmount;
        boolean isOpeningStock;
        FlightLegIdentifier fli;
        String crew;
        String tabletId;

        UpdateAsyncTask(final String productId, final int mutationAmount, final boolean isOpeningStock,
                         final String flightKey,
                         final FlightLegIdentifier fli,
                         final String crew,
                         final String tabletId,
                         final AirFiApplication airFiApplication) {

            this.productId = productId;
            this.mutationAmount = mutationAmount;
            this.isOpeningStock = isOpeningStock;
            this.fli = fli;
            this.tabletId = tabletId;
            this.crew = crew;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            productStockAdapter.notifyDataSetChanged();
        }

        @Override
        protected Void doInBackground(Void... params) {
            StockUtils.saveMutation(productId, mutationAmount, isOpeningStock, flightKey, fli, crew,
            tabletId, getAirFiApplication());
            return null;
        }
    }
类更新同步任务扩展异步任务{
私有字符串productId;
国际货币基金组织;
布尔等位斯托克;
飞行识别器;
弦乐队;
弦表;
UpdateAsyncTask(最终字符串productId、最终整型mutationAmount、最终布尔值isOpeningStock、,
最终字符串flightKey,
最终航班识别航班,
最后一队队员,
最终字符串表,
最终空运申请(空运申请){
this.productId=productId;
this.mutationAmount=mutationAmount;
this.isOpeningStock=isOpeningStock;
this.fli=fli;
this.tabletId=tabletId;
this.crew=crew;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
productStockAdapter.notifyDataSetChanged();
}
@凌驾
受保护的Void doInBackground(Void…参数){
StockUtils.saveMutation(productId、mutationMount、isOpeningStock、flightKey、fli、crew、,
tabletId,getAirbiApplication());
返回null;
}
}

您可以创建一个类,定义要传递给异步任务的参数

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@AllArgsConstructor(suppressConstructorProperties=true)
@Getter
@Setter
class Product {
  private String productId; 
  private int mutationAmount; 
  private boolean isOpeningStock;
  private String flightKey;
  private FlightLegIdentifier fli;
  private String crew;
  private String tabletId;
  private AirFiApplication airFiApplication;
} 

class UpdateAsyncTask extends AsyncTask<Product, Void, Void> {
  ...
  ...
  @Override
  protected Void doInBackground(Product... params) {
  }
}
导入lombok.allargsconstuctor;
进口龙目吸气剂;
进口龙目织机;
@AllArgsConstructor(suppressConstructorProperties=true)
@吸气剂
@塞特
类产品{
私有字符串productId;
私家车;
私有布尔等位斯托克;
私有字符串flightKey;
私人飞行识别器;
私人弦乐队;
私有字符串表;
私人航空申请;
} 
类UpdateAsyncTask扩展了异步任务{
...
...
@凌驾
受保护的Void doInBackground(产品…参数){
}
}
我正在使用ProjectLombok进行注释()。 您必须将以下内容添加到
build.gradle

依赖项{
...
编译“org.projectlombok:lombok:1.12.6”
}

注意:您也可以对
AsyncTask
返回的值执行相同的操作


谢谢

您可以创建一个类来定义要传递给异步任务的参数

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@AllArgsConstructor(suppressConstructorProperties=true)
@Getter
@Setter
class Product {
  private String productId; 
  private int mutationAmount; 
  private boolean isOpeningStock;
  private String flightKey;
  private FlightLegIdentifier fli;
  private String crew;
  private String tabletId;
  private AirFiApplication airFiApplication;
} 

class UpdateAsyncTask extends AsyncTask<Product, Void, Void> {
  ...
  ...
  @Override
  protected Void doInBackground(Product... params) {
  }
}
导入lombok.allargsconstuctor;
进口龙目吸气剂;
进口龙目织机;
@AllArgsConstructor(suppressConstructorProperties=true)
@吸气剂
@塞特
类产品{
私有字符串productId;
私家车;
私有布尔等位斯托克;
私有字符串flightKey;
私人飞行识别器;
私人弦乐队;
私有字符串表;
私人航空申请;
} 
类UpdateAsyncTask扩展了异步任务{
...
...
@凌驾
受保护的Void doInBackground(产品…参数){
}
}
我正在使用ProjectLombok进行注释()。 您必须将以下内容添加到
build.gradle

依赖项{
...
编译“org.projectlombok:lombok:1.12.6”
}

注意:您也可以对
AsyncTask
返回的值执行相同的操作


谢谢

您可以创建一个模型类并将其作为参数传递给
AsyncTask

 //Initialize model class
ModelClass params = new ModelClass(10,10);

//pass it to asynch tash
MyTask myTask = new MyTask();
myTask.execute(params);
以下是一个例子:

 private static class ModelClass {
    int length;
    int height;

    ModelClass(int l, int h) {
        this.length = l;
        this.height = h;
    }
}
定义
异步任务
任务

 private class MyTask extends AsyncTask <ModelClass, Void, Void> {


    @Override
     protected void onPreExecute(){

        }

    @Override
    protected void doInBackground(ModelClass... params) {
        int length = params[0].length;
        int height = params[0].height;
        ...
        //here u can perform your saveMutation() function using the parameters...
    }

    @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
        }
}

您可以创建一个模型类,并将其作为参数传递给
AsyncTask

 //Initialize model class
ModelClass params = new ModelClass(10,10);

//pass it to asynch tash
MyTask myTask = new MyTask();
myTask.execute(params);
以下是一个例子:

 private static class ModelClass {
    int length;
    int height;

    ModelClass(int l, int h) {
        this.length = l;
        this.height = h;
    }
}
定义
异步任务
任务

 private class MyTask extends AsyncTask <ModelClass, Void, Void> {


    @Override
     protected void onPreExecute(){

        }

    @Override
    protected void doInBackground(ModelClass... params) {
        int length = params[0].length;
        int height = params[0].height;
        ...
        //here u can perform your saveMutation() function using the parameters...
    }

    @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
        }
}


您可以创建一个pojo并将其传递给AYSNTASKY您可以创建一个模型类,然后将该模型传递给UpdateSyncTask构造函数。同时在模型中创建setter和getter如果问题是这个构造函数中参数的长度,那么即使使用一个特定的类,您也只需要将问题转移到这个类中。您现在拥有的参数数量没有问题。你可以创建一个pojo,并将其传递给AYSNTASKY。你可以创建一个模型类,然后将该模型传递给UpdateSyncTask构造函数。同时在模型中创建setter和getter如果问题是这个构造函数中参数的长度,那么即使使用一个特定的类,您也只需要将问题转移到这个类中。您现在拥有的参数数量没有问题。让它保持原样,把你的时间花在其他地方。我需要为它指定一个构造函数吗?(类似于我的异步任务?@SriHi-Baabidi,是的。我为构造函数、getter、setter、equals等使用lombok库,目的是()。将以下内容添加到您的依赖项中。@AxelH,您不必在使用project lombok时编写代码。(它通过一个单词的注释减少了代码中冗长的部分)。您可以在这里阅读更多-@AxelH-Lombok是java专业领域(spring boot)中使用的标准库&getter、setter为甚至包含10个字段的类创建的冗长性是众所周知的。只要在github中搜索lombok,您就会看到用法(),您仍然不在主题范围内。。。在这种情况下,OP为什么需要这个“魔法工程”?这不会减少构造函数中的参数数。。。所以这没用。我需要一个构造函数吗?(类似于我的异步任务?@SriHi-Baabidi,是的。I用户lombok库中的构造函数getter setter等于e