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