2014-12-16 3 views
-1

Я пытаюсь устранить исключение нулевого указателя, которое мешает мне заполнять адаптер массива. Я проследил его до точки, в которой я создаю экземпляр класса, и так, чтобы попытаться устранить, я создал следующий тост:Экземпляр класса в Java не может быть проверен на нуль

private void showSplits() { 
    // populate the split line 
    Split s = new Split(); 
    s = mTransaction.getSplit(); 

    int duration = Toast.LENGTH_SHORT; 

    if (s != null) { 
     Toast toast = Toast.makeText(getActivity(), s.getCategory(), duration); 
     Toast toast2 = Toast.makeText(getActivity(), s.getDescription(), duration); 
     Toast toast3 = Toast.makeText(getActivity(), s.getAmount(), duration); 
     toast.show(); 
     toast2.show(); 
     toast3.show(); 
    } else { 
     Toast toast4 = Toast.makeText(getActivity(), "S was null.", duration); 
     toast4.show(); 
    } 

.... }

Когда run, результат этого метода состоит в том, чтобы аккуратно распечатать содержимое каждого поля разделения, затем аккуратно распечатать «S было null». Я проверил, что я вызываю метод только один раз, поэтому я не вижу, как s может быть как null, так и не null.

Вот деталь класса ...

public class Split implements Serializable { 

private static final long serialVersionUID = 1L; 

private static final String JSON_CATEGORY = "category"; 
private static final String JSON_AMOUNT = "amount"; 
private static final String JSON_DESCRIPTION = "description"; 

private UUID mId; 
private String mCategory; 
private String mAmount; 
private String mDescription; 

public Split(String category, String amount, String description) { 
    mCategory = category; 
    mAmount = amount; 
    mDescription = description; 
} 

public Split() { 
    mId = UUID.randomUUID(); 
    mCategory = "none"; 
} 

public Split(JSONObject json) throws JSONException { 
    if (json.has(JSON_CATEGORY)) { 
      mCategory = json.getString(JSON_CATEGORY); 
    } 
    if (json.has(JSON_AMOUNT)) { 
     mAmount = json.getString(JSON_AMOUNT); 
    } 
    if (json.has(JSON_DESCRIPTION)) { 
     mDescription = json.getString(JSON_DESCRIPTION); 
    } 
} 

public JSONObject toJSON() throws JSONException { 
    JSONObject json = new JSONObject(); 
// if (mCategory != null) { 
     json.put(JSON_CATEGORY, mCategory); 
// } 
// if (mAmount != null) { 
     json.put(JSON_AMOUNT, mAmount); 
// } 
// if (mDescription != null) { 
     json.put(JSON_DESCRIPTION, mDescription); 
// } 
    return json; 
} 

// Factory method to convert an array of JSON objects into a list of objects 
// User.fromJson(jsonArray); 
public static ArrayList<Split> fromJson(JSONArray jsonObjects) { 
     ArrayList<Split> splits = new ArrayList<Split>(); 
     for (int i = 0; i < jsonObjects.length(); i++) { 
      try { 
       splits.add(new Split(jsonObjects.getJSONObject(i))); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     return splits; 
} 

public String getCategory() { 
    return mCategory; 
} 

public void setCategory(String category) { 
    mCategory = category; 
} 

public String getAmount() { 
    return mAmount; 
} 

public void setAmount(String amount) { 
    mAmount = amount; 
} 

public String getDescription() { 
    return mDescription; 
} 

public void setDescription(String description) { 
    mDescription = description; 
}  

}

В меру моих способностей, чтобы сказать, showSplits вызывается только один раз в фрагменте я работаю в.

+0

Is 's' аббревиатура для "кота Шредингера" ??? – ajb

+0

Прежде всего вы назначаете переменную 's' (что является ужасным именем для переменной, но это не проверка кода, поэтому я отвлекаюсь), а затем на следующей строке вы меняете содержимое' s'. Во-вторых, где определяется 'mTransaction'? Может ли оно быть нулевым? – MeetTitan

+0

Я не вижу ничего плохого в вашем коде, поэтому кажется, что 'showSplits' на самом деле вызываются более одного раза. Как вы подтвердили, что это не так? Может быть, добавить еще один тост в начале 'showSplits', чтобы проверить ... – ajb

ответ

-1

В первой строке вы ссылаетесь на переменную s на новый Сплит-объект, а во второй строке вы меняете ссылку s на mTransaction.getSplit(). Если объект возвращается mTransaction.getSplit() имеет значение null, то ваш s будет ссылаться на null. Среднее значение s будет равно нулю.

Split s = new Split(); 
s = mTransaction.getSplit(); 

ваш mTransaction.getSplit() может возвращаться нулевое значение, попробуйте отладить его

+0

Это не отвечает на вопрос. Если 'getSplit()' возвращает значение null, то почему он показывает «тост», «toast2',« toast3'? – ajb

+0

Вы также можете показать код фрагмента, который может помочь в решении проблем. –

+0

Я определенно неправильно заказал довольно много назначений Split Object. К счастью, здесь нет квантовых головоломок. – wbascus

Смежные вопросы