Бился 3 дня с загрузкой csv файла на андроид. Я создал необработанную папку и добавил в нее файл brojler.csv. Однако каждый раз, когда я пытаюсь его загрузить, я получаю ошибку NullPointerException. Сам пробовал читать и решать, но исходя из этой темы (Что такое исключение NullPointerException и как его исправить?) не могу найти причину. Я новичок в android, но думаю, что все переменные определены хорошо. Как ни странно, в другом приложении тот же код работает и правильно загружает файл.
Brojler.csv состоит из 9 столбцов и 12 строк.
Кроме того, я изменил способ объявления списков, как показано ниже, но безуспешно.
List<String> ingredients = new ArrayList<>();
List<String> em = new ArrayList<>();
List<String> bo = new ArrayList<>();
And so on,
Мой код:
package com.example.nick.calcy;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Mix extends AppCompatActivity {
InputStream inputStream;
List<String> ingredients,em,bi,ws,ca,fs,na,L,M = new ArrayList<>();
String[] ids;
EditText et1,et2,et3,et4,et5,et6,et7;
Float sum;
Button buttonSum;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mix);
et1 = findViewById(R.id.editText11);
et2 = findViewById(R.id.editText12);
et3 = findViewById(R.id.editText13);
et4 = findViewById(R.id.editText14);
et5 = findViewById(R.id.editText15);
et6 = findViewById(R.id.editText16);
et7 = findViewById(R.id.editText17);
buttonSum = findViewById(R.id.button11);
inputStream = getResources().openRawResource(R.raw.brojler);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String csvLine;
while ((csvLine = reader.readLine()) != null) {
ids=csvLine.split(",");
try{
ingredients.add(ids[0]);
em.add(ids[1]);
bi.add(ids[2]);
ws.add(ids[3]);
ca.add(ids[4]);
fs.add(ids[5]);
na.add(ids[6]);
L.add(ids[7]);
M.add(ids[8]);
}catch (Exception e){
Log.e("Unknown error",e.toString());
}
}
}
catch (IOException ex) {
throw new RuntimeException("Error in reading CSV file: "+ex);
}
buttonSum.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if (et1.getText().toString().trim().length() == 0 ||
et2.getText().toString().trim().length() == 0 ||
et3.getText().toString().trim().length() == 0 ||
et4.getText().toString().trim().length() == 0 ||
et5.getText().toString().trim().length() == 0 ||
et6.getText().toString().trim().length() == 0 ||
et7.getText().toString().trim().length() == 0) {
CharSequence text = "Blank fields detected";
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
}
else{
Intent i = new Intent(getApplicationContext(),Summary.class);
Float x1 = Float.parseFloat(et1.getText().toString());
Float x2 = Float.parseFloat(et2.getText().toString());
Float x3 = Float.parseFloat(et3.getText().toString());
Float x4 = Float.parseFloat(et4.getText().toString());
Float x5 = Float.parseFloat(et5.getText().toString());
Float x6 = Float.parseFloat(et6.getText().toString());
Float x7 = Float.parseFloat(et7.getText().toString());
sum = x1+x2+x3+x4+x5+x6+x7;
i.putExtra("x1", x1);
i.putExtra("x2", x2);
i.putExtra("x3", x3);
i.putExtra("x4", x4);
i.putExtra("x5", x5);
i.putExtra("x6", x6);
i.putExtra("x7", x7);
if (sum == 100){
startActivity(i);
} else{
CharSequence text = "Sum must equal 100%";
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
}
}}
});
}
}
Мои ошибки:
E/Unknown error: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference
I/chatty: uid=10083(u0_a83) com.example.nick.calcy identical 1 line
E/Unknown error: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference
E/Unknown error: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference
I/chatty: uid=10083(u0_a83) com.example.nick.calcy expire 7 lines
E/Unknown error: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference
Предполагаю, что проблема может заключаться в уровне доступа к файлу. В рабочем приложении я использую код в main_activity, а в другом приложении он не работает, потому что он вызывается в другом (не основном) действии.
Помощь будет очень признательна




NullPointerException сообщает вам, что что-то не имеет значения. т.е. он не ссылается на действительный экземпляр.
Судя по всему, вам нужно инициализировать свои списки. Я не вижу нигде, где вы их инициализируете. Мне также кажется странным, что Android Studio lint не предупредил вас о возможной нулевой переменной, предполагая, что это то, что вы используете.
Хорошо, вот оно:
List<String> ingredients = new ArrayList<>(),
em = new ArrayList<>(),
bi = new ArrayList<>(),
ws = new ArrayList<>(),
ca = new ArrayList<>(),
fs = new ArrayList<>(),
na = new ArrayList<>(),
L = new ArrayList<>(),
M = new ArrayList<>();
Кроме того, проверьте, содержат ли строки ожидаемое количество столбцов; то есть проверьте, есть ли в массиве ids все необходимые элементы, если вы не уверены, что все строки содержат.
Кроме того, я почти уверен, что есть лучший способ делать то, что вы делаете. Вы также можете изучить использование Gson / JSON, если у вас есть контроль над данными.