Как я могу прочитать и показать данные из файла CSV в Android? - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь понять, как я могу прочитать из CSV-файла и показать его на активность в Android Studio. Файл может содержать, например, такую ​​информацию:

name,employer,location,position type,core competency

Junior Data Analyst,Lockerdome,Saint Louis,Data Scientist / Business Intelligence, Statistical Analysis
Project Coordinator Support,Maritz,Saint Louis,Technical Assistant / User Support,Non-coding
Junior Web Developer,Cozy,Portland,Web - Front End,Ruby 
Junior Developer 3,LiveAnswer,South Florida,Web - Full Stack,Java 
Full Stack Engineer,Splitwise,Rhode Island,Web - Full Stack,Ruby 
Customer Experience,Splitwise,Rhode Island,Project Manager / Analyst,Non-coding 
IT Support Specialist,Viamontech,South Florida,Technical Assistant / User Support,Non-coding C#/.net
Developer ,Hunter Engineering,Saint Louis,Software / Enterprise Developer,.Net
Junior Developer,"TruckMovers.com, Inc.",Kansas City,Web - Full Stack,Python 
Software Engineer,Computer Associates Inc,Rhode Island,Software / Enterprise Developer,.Net

Для многих это, вероятно, простая задача, но я довольно новичок в разработке Android. Я видел несколько учебных пособий, но все они по-разному, и некоторые из них старше. Что меня смущало, так это то, что один парень создает класс на Java, а другой - деятельность. Еще одна путаница в том, что другой парень использует шаблон MVC в Android. Я знаю, что это имеет смысл в .NET. Но может ли кто-нибудь помочь мне с чего начать? Какие структуры следовать? Я знаю, что лучше начинать с деятельности. Например, jobListActivity.

Любая ссылка на любые хорошие и новые учебники или примеры кодов, чтобы я мог начать, очень ценится.

РЕДАКТИРОВАТЬ (Послекомментарии): Итак, я создал ListActivity, который должен отображать список заданий, считываемых из файла CSV. Класс JobListActivity, который имеет атрибуты для задания.

Тем не менее я не могу отобразить список заданий из файла CSV. Это мои коды:

MainActivity.java

package com.example.jobsearch;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;
import com.opencsv.CSVReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {


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

        final ListView list = findViewById(R.id.list);
        ArrayList<String> arrayList = new ArrayList<>();

        try {
            String csvfileString = this.getApplicationInfo().dataDir + File.separatorChar + "jobsCSV.csv";
            File csvfile = new File(csvfileString);

            CSVReader reader = new CSVReader(new FileReader("csvfile.getAbsolutePath()"));
            String[] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                // nextLine[] is an array of values from the line
                System.out.println(nextLine[0] + nextLine[1] + "etc...");
            }
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "The specified file was not found", Toast.LENGTH_SHORT).show();
        }
    }
}

activity_list.xml

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ListActivity">

    <TextView
        android:id="@+id/tvAList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="@string/textViewActivityList"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

listActivity.java

package com.example.jobsearch;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class ListActivity extends AppCompatActivity {

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

JobListActivity.javaкласс

package com.example.jobsearch;

import android.widget.ImageView;

public class JobsListActivity {
    public String Company;
    public String Title;
    public String Rating;
    public String ApplyStatus;
    public ImageView CompanyLogos;
    public String Location;
    public String Position;

    public JobsListActivity(String company,
                            String title,
                            String rating,
                            String applyStatus,
                            ImageView companyLogos,
                            String location,
                            String position) {
        Company = company;
        Title = title;
        Rating = rating;
        ApplyStatus = applyStatus;
        CompanyLogos = companyLogos;
        Location = location;
        Position = position;
    }

}

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Попробуйте OpenCSV - это облегчит вашу жизнь.

Сначала добавьте этот пакет в ваши зависимости gradle следующим образом

implementation 'com.opencsv:opencsv:4.6'

Затем вы можете сделать

import com.opencsv.CSVReader;
import java.io.IOException;
import java.io.FileReader;


...

try {
    CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
    String[] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        // nextLine[] is an array of values from the line
        System.out.println(nextLine[0] + nextLine[1] + "etc...");
    }
} catch (IOException e) {

}
or

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
List myEntries = reader.readAll();
Edit after comment
try {
    File csvfile = new File(Environment.getExternalStorageDirectory() + "/csvfile.csv");
    CSVReader reader = new CSVReader(new FileReader("csvfile.getAbsolutePath()"));
    String[] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        // nextLine[] is an array of values from the line
        System.out.println(nextLine[0] + nextLine[1] + "etc...");
    }
} catch (Exception e) {
    e.printStackTrace();
    Toast.makeText(this, "The specified file was not found", Toast.LENGTH_SHORT).show();
}

String csvfileString = this.getApplicationInfo().dataDir + File.separatorChar + "csvfile.csv"
File csvfile = new File(csvfileString);

Если вы хотите упаковать файл .csv вместе с приложением и установить его во внутреннее хранилище при установке приложения, создайте папку ресурсов в папке проекта src / main (например, c:\ myapp \ app \ src \ main \ assets) и поместите туда файл .csv, а затем назовите его так в своей деятельности:

0 голосов
/ 04 октября 2019

Вы действительно запутались и перепутали некоторые вещи. Давайте пойдем шаг за шагом.

ШАГ ЗА ШАГОМ, ВОПРОС ПО ВОПРОСУ

  1. Класс и действие не совпадают. Вы можете прочитать об этом здесь и здесь . Проще говоря:

    • Класс - это форма Java.
    • Для каждого экрана в вашем приложении вы будете выполнять разные действия. Каждый из них может иметь более одного класса.
  2. Затем, в Android, если вы хотите создать какое-либо приложение (включая то, которое должно читать .csv), выпотребуется действие, чтобы был хотя бы один экран, на котором может находиться пользователь. То есть первое, что вам нужно сделать, - это создать действие и добавить его в манифест в качестве действия по умолчанию (чтобы оно отображалось вместе с остальными приложениями). Сделайте это (создать действие), а затем это (установите его по умолчанию).

  3. Теперь вы сможете попробовать приложениев эмуляторе или физическом устройстве и увидите пустой экран, который ничего не делает.

  4. Пока все хорошо. Теперь к проблеме чтения .csv. Мы прочтем код, как только пользователь войдет в действие, когда оно будет создано (в методе onCreate ). В вашей деятельности должен быть фрагмент кода, подобный следующему, в противном случае создайте его.

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
Теперь мы продолжим читать csv внутри onCreate (вы также можете сделать это, когда пользователь нажимает кнопку и т. Д.). Обратите внимание, что одна вещь читает это, а другая создает видимые списки пользовательского интерфейса с ним. Здесь вы можете увидеть, как читать CSV-файл (если он у вас есть в sd или вы упаковываете его вместе с приложением).

РЕДАКТИРОВАТЬ. Давайте углубимся в этот шаг (5). Как указано в ответе, на который я ссылался, вам необходимо:

Добавить этот пакет в ваши зависимости gradle следующим образом

implementation 'com.opencsv:opencsv:4.6'

И затем изменить onCreate (иливезде, где вы хотите прочитать CSV):

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

try {
// OPTION 1: if the file is in the sd
    File csvfile = new File(Environment.getExternalStorageDirectory() + "/csvfile.csv"); 
// END OF OPTION 1

// OPTION 2: pack the file with the app
/* "If you want to package the .csv file with the application and have it install on the internal storage when the app installs, create an assets folder in your project src/main folder (e.g., c:\myapp\app\src\main\assets\), and put the .csv file in there, then reference it like this in your activity:" (from the cited answer) */
String csvfileString = this.getApplicationInfo().dataDir + File.separatorChar + "csvfile.csv"
File csvfile = new File(csvfileString);
// END OF OPTION 2

    CSVReader reader = new CSVReader(new FileReader("csvfile.getAbsolutePath()"));
    String[] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        // nextLine[] is an array of values from the line
        System.out.println(nextLine[0] + nextLine[1] + "etc...");
    }
} catch (Exception e) {
    e.printStackTrace();
    Toast.makeText(this, "The specified file was not found", Toast.LENGTH_SHORT).show();
}
}

НАКОНЕЦ

Правильно, так что это будет так. Если вы также хотели представить эти данные в виде списка, сетки и т. Д., То это другой вопрос! Однако на всякий случай вам просто нужно снова использовать созданное вами действие, но добавить ListView в макет и передать список также в onCreate (например). Смотрите учебное пособие здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...