Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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 如何避免;变量可能已初始化";内部onCreateView?_Java_Android - Fatal编程技术网

Java 如何避免;变量可能已初始化";内部onCreateView?

Java 如何避免;变量可能已初始化";内部onCreateView?,java,android,Java,Android,我发现错误变量可能已初始化 我正在使用onChildClickListener,这使我将变量声明为final。 我需要将变量放入try-Catch中,这就是为什么我需要在外部声明变量 我不知道如何声明变量以使此错误消失。有什么想法吗 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceSta

我发现错误变量可能已初始化 我正在使用onChildClickListener,这使我将变量声明为final。 我需要将变量放入try-Catch中,这就是为什么我需要在外部声明变量

我不知道如何声明变量以使此错误消失。有什么想法吗

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_balance, container, false);
    ExpandableListView expandableListView = (ExpandableListView)view.findViewById(R.id.fragBalance_expListView);
    final ArrayList<Balance> arrayList;
    try {
        arrayList = (ArrayList<Balance>) new BalanceController(new BalanceFromApiJson()).getBalance(getContext(),"http://10.113.10.10:50591/api/Balance?reservationID=1452455");
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    BalanceAdapter balanceAdapter = new BalanceAdapter(getContext(),arrayList);
    expandableListView.setAdapter(balanceAdapter);



    expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            Toast.makeText(getContext(),arrayList.get(groupPosition).getTransactions().get(childPosition).toString() , Toast.LENGTH_SHORT).show();
            return false;
        }
    });


    return view;
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u天平,容器,假);
ExpandableListView ExpandableListView=(ExpandableListView)view.findViewById(R.id.fragBalance\u expListView);
最终ArrayList ArrayList;
试一试{
arrayList=(arrayList)new BalanceController(new BalanceFromApiJson()).getBalance(getContext(),”http://10.113.10.10:50591/api/Balance?reservationID=1452455");
}捕获(执行例外){
e、 printStackTrace();
}捕捉(中断异常e){
e、 printStackTrace();
}
BalanceAdapter BalanceAdapter=新的BalanceAdapter(getContext(),arrayList);
expandableListView.setAdapter(balanceAdapter);
expandableListView.setOnChildClickListener(新的expandableListView.OnChildClickListener(){
@凌驾
公共布尔onChildClick(ExpandableListView父视图、视图v、int-groupPosition、int-childPosition、长id){
Toast.makeText(getContext(),arrayList.get(groupPosition).getTransactions().get(childPosition).toString(),Toast.LENGTH_SHORT.show();
返回false;
}
});
返回视图;
}

如果在构建
BalanceController
期间引发异常,则不会初始化
阵列列表

然后,您可能会在try/catch块之后读取未初始化的
arrayList
。这在Java中是不允许的,编译失败

如果程序的其余部分能够容忍
null
arrayList
,那么最简单的方法就是在
catch
处理程序中写入
arrayList=null
,如果您想保留它
final
(让我们使用多catch语法来避免重复):


感谢您的回答,但我的解决方案是声明第二个相同类型的变量,添加我需要的操作,并最终将对象复制到最终的ArrayList

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_balance, container, false);
    ExpandableListView expandableListView = (ExpandableListView)view.findViewById(R.id.fragBalance_expListView);
    final ArrayList<Balance> arrayList;
    ArrayList<Balance> arrayList1 = null;
    try {
        arrayList1 = (ArrayList<Balance>) new BalanceController(new BalanceFromApiJson()).getBalance(getContext(),"http://10.113.10.10:50591/api/Balance?reservationID=4564548");
    } catch (ExecutionException | InterruptedException e) {
        e.printStackTrace();
        //arrayList1 = null;
    }

    arrayList = arrayList1;
    if(arrayList1 != null){
        BalanceAdapter balanceAdapter = new BalanceAdapter(getContext(),arrayList);
        expandableListView.setAdapter(balanceAdapter);
    }



    expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            Toast.makeText(getContext(),arrayList.get(groupPosition).getTransactions().get(childPosition).toString() , Toast.LENGTH_SHORT).show();
            return false;
        }
    });


    return view;
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u天平,容器,假);
ExpandableListView ExpandableListView=(ExpandableListView)view.findViewById(R.id.fragBalance\u expListView);
最终ArrayList ArrayList;
ArrayList ArrayList 1=null;
试一试{
arrayList1=(ArrayList)新建BalanceController(new BalanceFromApiJson())。getBalance(getContext(),”http://10.113.10.10:50591/api/Balance?reservationID=4564548");
}捕获(ExecutionException | InterruptedException e){
e、 printStackTrace();
//arrayList1=null;
}
arrayList=arrayList 1;
if(arrayList1!=null){
BalanceAdapter BalanceAdapter=新的BalanceAdapter(getContext(),arrayList);
expandableListView.setAdapter(balanceAdapter);
}
expandableListView.setOnChildClickListener(新的expandableListView.OnChildClickListener(){
@凌驾
公共布尔onChildClick(ExpandableListView父视图、视图v、int-groupPosition、int-childPosition、长id){
Toast.makeText(getContext(),arrayList.get(groupPosition).getTransactions().get(childPosition).toString(),Toast.LENGTH_SHORT.show();
返回false;
}
});
返回视图;
}

只需将
=null
放在后面即可。如果我这样做,则可能会出现另一个错误,按照您编写的方式显示“无法为最终变量赋值”,如果初始化
数组列表的行引发异常,您希望该方法继续运行,并尝试在不使用arrayList的情况下运行其其余代码。我认为编译错误是一个提示,可能您的方法应该在此时放弃,而不是尝试使用不存在的arrayList;ArrayList ArrayList 1;请尝试{ArrayList=(ArrayList)新建BalanceController(new BalanceFromApiJson())。getBalance(getContext(),“http://10.113.10.10:50591/api/Balance?reservationID=456465);}catch(ExecutionException | interruptedeexception e){e.printStackTrace();arrayList1=null;}arrayList=arrayList1
    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_balance, container, false);
    ExpandableListView expandableListView = (ExpandableListView)view.findViewById(R.id.fragBalance_expListView);
    final ArrayList<Balance> arrayList;
    ArrayList<Balance> arrayList1 = null;
    try {
        arrayList1 = (ArrayList<Balance>) new BalanceController(new BalanceFromApiJson()).getBalance(getContext(),"http://10.113.10.10:50591/api/Balance?reservationID=4564548");
    } catch (ExecutionException | InterruptedException e) {
        e.printStackTrace();
        //arrayList1 = null;
    }

    arrayList = arrayList1;
    if(arrayList1 != null){
        BalanceAdapter balanceAdapter = new BalanceAdapter(getContext(),arrayList);
        expandableListView.setAdapter(balanceAdapter);
    }



    expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            Toast.makeText(getContext(),arrayList.get(groupPosition).getTransactions().get(childPosition).toString() , Toast.LENGTH_SHORT).show();
            return false;
        }
    });


    return view;
}