2016-05-04 3 views
0

Вот мой код:Сохранение данных Issue, SharedPreferences

public class MainActivity extends AppCompatActivity { 
ListView listView; 
List all; 
SharedPreferences sharedPref; 
SharedPreferences.Editor editor; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sharedPref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
    editor = sharedPref.edit(); 
    setListAdapter(); 
} 
private void setListAdapter(){ 
    final String[] data = displayData().toString().split(","); 
    ListAdapter listAdapter = new CustomAdapter(this, data); 
    listView = (ListView) findViewById(R.id.listView); 
    listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); 
    listView.setAdapter(listAdapter); 
} 
public List displayData(){ 
    all = new ArrayList<>(); 
    try { 
     Map<String, ?> allMap = sharedPref.getAll(); 
     for (Map.Entry<String, ?> entry : allMap.entrySet()) { 
      all.add(entry.getKey().toString() + ":" + entry.getValue().toString()); 
     } 
    } catch(NullPointerException npe){ 
     all.add(" : "); 
    } 
    Log.i("understandCode", "displayData: " + all.toString()); 
    return all; 
} 

public void add(View view){ 
    editor.putString(" ", " "); 
    editor.apply(); 
    setListAdapter(); 
} 
private class CustomAdapter extends ArrayAdapter<String> { 
    SharedPreferences.Editor editor; 
    String type; 
    String content; 
    public CustomAdapter(Context context, String[] resource) { 
     super(context, R.layout.custom_row, resource); 
     SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences 
       (MainActivity.this); 
     editor = sharedPref.edit(); 
    } 
    EditText typeET; 
    EditText contentET; 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     View customView = layoutInflater.inflate(R.layout.custom_row, parent, false); 
     String singleItem = getItem(position); 
     typeET = (EditText) customView.findViewById(R.id.type); 
     contentET = (EditText) customView.findViewById(R.id.content); 
     String[] givenStrings = singleItem.split(":"); 
     try { 
      typeET.setText(givenStrings[0]); 
      contentET.setText(givenStrings[1]); 
     }catch(ArrayIndexOutOfBoundsException aioobe){ 
      typeET.setText(" "); 
      contentET.setText(" "); 
     } 
     typeET.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       type = s.toString(); 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       type = s.toString(); 
       save(); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      } 
     }); 
     contentET.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       content = s.toString(); 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       content = s.toString(); 
       save(); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 


      } 
     }); 
     return customView; 
    } 

    private void save() { 
     editor.putString(type, content); 
     editor.apply(); 
     Log.i("understandCode", type + ":" + content); 

    } 



} 

}

Вот мой журнал, когда я редактирую свой ключ, значение:

05-04 17:52:52.107 11146-11146/com.x.xI/understandCode: [ my mom!a said:y ] 
05-04 17:52:52.462 11146-11146/com.valerdaita.myinfo I/understandCode: [ my mom!a said:yo ] 
05-04 17:52:52.698 11146-11146/com.valerdaita.myinfo I/understandCode: [ my mom!a said:yol ] 
05-04 17:52:52.897 11146-11146/com.x.x I/understandCode: [ my mom!a said:yolo ] 

Когда я перезагружать активность :

05-04 17:53:05.085 12056-12056/com.x.x I/understandCode: displayData: [ : ] 

Таким образом, он не показывает данные, которые я сохранил. У меня действительно проблема с проблемой, потому что я знаю, что мои функции сохранения работают хорошо из-за Log, но я не могу идентифицировать какие-либо проблемы с дисплеем.

+0

Не совсем уверен, но вы уверены, что не получаете NPE? В вашей инструкции 'catch', когда происходит NPE, вы добавляете значение String':: '. Можете ли вы поместить некоторые другие «Журналы» внутри «try catch». Посмотрите, сможете ли вы действительно пройти через это? –

+0

У меня есть исключение NullPointerException, если это то, что вы имеете в виду. Однако не должно быть NullPointerException, если приложение работает правильно. @trigger – Vicky

ответ

0

Вы обязательно получите NPE, поскольку вы еще не сохранили никаких значений в своих предпочтениях.

Кодовый поток setListAdapter() ->displayData() ->sharedPref.getAll().

В промежутке между этим вы не добавляете пару ключей и значений. Итак, почему вы ожидаете, что вы не получите NPE? Сохраните некоторые значения перед использованием getAll(), если вы не хотите получать NPE.

+0

«Моя мама! a сказал: yolo» было тем, что я спас. @ShadabAnsari – Vicky

+0

Вы сохраняете эти значения после создания списка, но вы извлекаете значения еще до создания списка. Вот что я объяснил в своем ответе. –

+0

Что нужно изменить для потока кода? @ShadabAnsari – Vicky

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