Android Studio — импорт данных из csv и отображение в тексте (сбой приложения)

#java #android #android-studio

#java #Android #android-studio

Вопрос:

Я пытаюсь импортировать данные из CSV-файла, но мое приложение каждый раз выходит из строя. Ниже приведен мой код, который я написал. Я не получаю ошибок.

Моя основная цель — импортировать данные из указанного csv-файла и поместить в переменную с именем count_car. Я хочу показать значение в текстовом поле, когда я нажимаю на кнопку. Но я не смог импортировать данные из CSV-файла.

 package com.example.deneme2;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.String;


public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView text_zeros = findViewById(R.id.TextNumberZero);
    TextView text_ones = findViewById(R.id.TextNumberOne);
    TextView textView = findViewById(R.id.textView);
    TextView textView1 = findViewById(R.id.textView2);
    Button button =  findViewById(R.id.button);


    String path = "C:\Users\baran\Desktop\FALL 2020\ELEC491\deneme\11111111111\venv\numberofcars.csv";

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            BufferedReader csvReader = null;
            try {
                csvReader = new BufferedReader(new FileReader(path));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            String count_car = null;
            int counting =0;
            while (true) {
                try {
                    if (!((count_car = csvReader.readLine()) != null)) break;
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //String[] data = count_car.split(",");
                String count_cars = count_car;
                int count_park= 100;

                String countpark = String.valueOf(count_park);
                String countcars = String.valueOf(count_cars);
                text_ones.setText(countpark);
                text_zeros.setText(countcars);
                counting = counting  1 ;
                if (counting == 50);
                    break;
            }
        }
    });
}
}
 

ПРАВКА 1

 package com.example.exceldeneme;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.lang.String;
import java.util.List;

public class MainActivity<number_cars> extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView text_cars = findViewById(R.id.textCars);

        readData();
        String count_park = Arrays.toString(number_of_cars.get(1));
        text_cars.setText(count_park);

    }
    private List<String[]> number_of_cars = new ArrayList<>();
    private void readData() {
        InputStream is = getResources().openRawResource(R.raw.numberofcars);
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(is, Charset.forName("UTF-8"))
        );
        String line = "";
            try {
                while(((line = reader.readLine()) != null)) {
                String[] tokens = line.split(",");

                number_of_cars.add(tokens);
                Log.d("MyActivity","Just created"  Arrays.toString(tokens));
                }
            }
            catch (IOException e) {
                Log.wtf("MyActivity","Error reading data file on line"   line, e);
                e.printStackTrace();
            }

    }
}
 

Я изменил код. Теперь я использую другой метод. Но приложение снова начинает сбоить. Есть ли какое-либо мнение? Спасибо за ответы.

ПРАВКА 2

 package com.example.exceldeneme;

import androidx.appcompat.app.AppCompatActivity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.lang.String;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.List;


public class MainActivity<number_cars> extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        VideoView videoView = findViewById(R.id.video_view);
        Button  button = findViewById(R.id.button);
        TextView text_cars = findViewById(R.id.textEmpty);
        TextView text_total_lots = findViewById(R.id.textTotalLots);
        readData();
        int number_of_park = 100;
        text_total_lots.setText(String.valueOf(number_of_park));
        int counter = 0;

        String videoPath = "android.resource://"   getPackageName()   "/"   R.raw.camera_out;
        Uri uri = Uri.parse(videoPath);
        videoView.setVideoURI(uri);
        MediaController mediaController = new MediaController(this);
        videoView.setMediaController(mediaController);
        mediaController.setAnchorView(videoView);

        //Log.d("Selam","This is my message"  number_of_cars.get(0)[0]);
        //String count_park = number_of_cars.get(0)[2];
        //text_cars.setText(count_park);
        for (String i : number_of_cars.get(0)){
            counter = counter   1 ;
        }

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                int counter = 0;
                for (String i : number_of_cars.get(0)){
                    counter = counter   1 ;
                }
                for (int i = 1; i < counter-1;i= i  1){
                    String count_park = number_of_cars.get(0)[i];
                    text_cars.setText(count_park);
                    //SystemClock.sleep(1000); //ms
                    Log.d("Selam","SORUN YOK");
                }
            }
        });


    }
    private ArrayList<String[]> number_of_cars = new ArrayList<String[]>();
    private void readData() {
        InputStream is = getResources().openRawResource(R.raw.numberofcars);
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(is, Charset.forName("UTF-8"))
        );
        String line = "";
            try {
                while(((line = reader.readLine()) != null)) {
                String[] tokens = line.split(",");
                                number_of_cars.add(tokens);
                Log.d("MyActivity","Just created"  Arrays.toString(tokens));
                }
            }
            catch (IOException e) {
                Log.wtf("MyActivity","Error reading data file on line"   line, e);
                e.printStackTrace();
            }
    }
}
 

Мой окончательный код здесь. Я решил свои проблемы и импортировал данные из CSV-файла. Я использовал VideoView для показа видео. Теперь я пытаюсь решить проблему задержки.

Я хочу, чтобы приведенная ниже функция цикла for ожидала 1 секунду или 50 мс. Но я не смог найти решение.

 for (int i = 1; i < counter-1;i= i  1){
                    String count_park = number_of_cars.get(0)[i];
                    text_cars.setText(count_park);
                    //SystemClock.sleep(1000); //ms
                    Log.d("Selam","SORUN YOK");
                }
 

Если кто-нибудь может помочь, я ценю это 🙂 Спасибо за ваши ответы.

Комментарии:

1. Если ваше приложение выходит из строя, возникло исключение, которое вы не перехватили. Logcat должен сообщить вам, какой из них.

2. "C:\Users\baran\Desktop\FALL 2020\ELEC491\deneme\11111111111\venv\numberofcars.csv"; Две ошибки. Во-первых: это путь на ПК с Windows. Он не существует на устройстве Android. Второе: итак, у вас есть FileNotFoundException, которое вы улавливаете, что хорошо, но после этого вы продолжаете, как будто ничего не произошло. Затем вы должны остановить / вернуться

3. blackapps спасибо за ваш ответ. Я решил проблему сбоя. Проблема с путем, о которой вы сказали, верна. Когда я посмотрел на debug, я увидел «W / System.err: java.io.FileNotFoundException: C:/Users/baran/Desktop/FALL 2020/ELEC491/deneme/11111111111/venv/numberofcars.csv: открыть не удалось: ENOENT (нет такого файла или каталога) «. Есть ли какие-либо идеи, как я могу это решить? Или я могу импортировать csv-файл с Google Диска? Это было бы еще лучше. Большое спасибо.

4. 1. Вы действительно можете импортировать csv-файл с Google Диска, если у вас правильный uri. 2. Вы можете поместить csv-файл с Android Studio в папку assets вашего проекта. А затем во время выполнения прочитайте файл с помощью диспетчера ресурсов. 3. Если файл csv уже находится на вашем устройстве Android, используйте полный путь к файлу, используя код, который вы опубликовали здесь .

5. Еще раз спасибо. Можете ли вы подсказать мне метод, который я должен использовать для импорта файла csv с Google Диска? У меня есть ссылка на файл в виде URL-адреса с моего собственного диска, но я не знаю, как ее реализовать. И я поместил файл csv в res в raw-файл, но он снова не сработал.