#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-файл, но он снова не сработал.