2017-03-22 17 views
0

Ich bekomme den Fehler Variable könnte initialisiert werden Ich benutze onChildClickListener, die ich die Variable als endgültig deklarieren. Ich muss meine Variable in try-Catch setzen, deshalb muss ich die Variable außerhalb deklarieren.Wie zu vermeiden, "Variable möglicherweise initialisiert werden" in onCreateView?

Ich kann nicht herausfinden, wie man die Variable deklariert, um diesen Fehler verschwinden zu lassen. Irgendeine Idee?

@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; 
} 
+2

Setzen Sie einfach '= null' danach. –

+1

Mögliches Duplikat von [Variable wurde möglicherweise nicht initialisiert Fehler] (http://stackoverflow.com/questions/2448843/variable-might-not-have-been-initialized-error) –

+0

Wenn ich das tue, würde es einen anderen Fehler erscheinen "Wie kann man einer finalen Variablen keinen Wert zuweisen?" – mavi

Antwort

0

Vielen Dank für Ihre Antworten, aber die Lösung, die für mein wurde erklärt, eine zweite Variable des gleichen Typs, fügen Sie die Operation, die ich brauchte, und schließlich das Kopieren des Objekts auf die endgültige Arraylist gearbeitet.

@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; 
} 
0

arrayList nicht initialisiert wird, wenn eine Ausnahme während des Baus des BalanceController geworfen wird.

Sie geben dann die Möglichkeit aus, dass ein nicht initialisierter arrayList nach dem try/catch-Block gelesen wird. Das ist in Java nicht erlaubt und die Kompilierung schlägt fehl.

Wenn der Rest des Programms der Lage ist, ein nullarrayList zu tolerieren, dann ist die einfachste Sache zu tun arrayList = null in den catch Handler zu schreiben, wenn Sie es behalten wollen final (die Syntax Multi-catch verwenden lassen Wiederholungen zu vermeiden):

} catch (ExecutionException | InterruptedException e) { 
    e.printStackTrace(); 
    arrayList = null; 
} 
+0

Wenn ich das tue, erscheint ein anderer Fehler ** "Variable könnte bereits zugewiesen worden sein" ** – mavi

+0

Ich kann das beheben, indem ich eine andere Variable deklariere 'final ArrayList arrayList; ArrayList arrayList1; try { arrayList1 = (ArrayList ) neuer BalanceController (neuer BalanceFromApiJson()). GetBalance (getContext(), "http://10.113.10.10:50591/api/Balance?reservationID=456465"); } catch (ExecutionException | InterruptedException e) { e.printStackTrace(); arrayList1 = null; } arrayList = arrayList1; ' – mavi

Verwandte Themen