android - 如何在 Android 中读取并显示 csv 文件中的数据?

标签 android android-activity

我试图了解如何从 csv 文件中读取数据并将其显示在 android studio 中的 Activity 中。该文件可以包含例如以下信息:

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 创建一个类,而另一个人创建一个 Activity 。更让我困惑的是,另一个人在 Android 中使用 MVC 模式。我知道这在 .NET 中是有意义的。 但有人可以指导我从哪里开始吗?遵循哪些结构?我知道最好的做法是从 Activity 开始。例如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;
    }

}

最佳答案

你确实很困惑,并且混淆了一些事情。让我们一步一步来。

一步一步,一个问题一个问题

  1. 类(class)和 Activity 不同。您可以阅读herehere 。简单来说:

    • 类是一种 Java 形式。
    • 对于应用中的每个屏幕,您都会有一个 不同的 Activity 。他们每个人可能有多个类。
  2. 然后,在 Android 中,如果您想做任何应用程序(包括需要读取 .csv 的应用程序),您将需要一个 Activity,以便至少有一个屏幕可供用户操作。也就是说,您需要做的第一件事是创建一个 Activity 并将其作为默认 Activity 添加到 list 中(以便它与其他应用程序一起出现)。做this (创建 Activity ),然后this (将其设置为默认值)。

  3. 现在您应该可以在emulator中尝试该应用程序了。或 physical device并看到一个空屏幕,什么也不做。

  4. 到目前为止,一切顺利。现在来解决 .csv 读取问题。当用户进入 Activity 、创建 Activity 时(在 onCreate 方法中),我们将立即读取代码。您的 Activity 中应该有一段类似于以下代码的代码,否则,请创建它。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
  • 现在我们将继续读取 onCreate 中的 csv(您也可以在用户按下按钮等时执行此操作)。请注意,一件事是读取它,另一件事是用它创建可见的 UI 列表。 Here您可以了解如何读取 csv 文件(如果您将其存储在 SD 中或将其与应用程序打包在一起)。
  • 编辑。让我们更深入地了解这一步 (5)。正如我引用的答案中所述,您需要:

    Add this package to your gradle dependencies as follows

    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();
    }
    }
    

    终于

    对啊,就这样吧。如果您还想在列表、网格等中表示这些数据,那么,这是另一个问题了!但是,为了以防万一,您只需要再次使用您创建的 Activity ,但将 ListView 添加到您的布局中,并在 onCreate 中提供列表(例如)。查看教程here .

    关于android - 如何在 Android 中读取并显示 csv 文件中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58225542/

    相关文章:

    android - 在应用程序类中更改整个应用程序的主题

    Java在实现Android Activity时找不到符号

    android - 单击按钮播放随机声音

    java - 安卓。将数据从类发送到 Activity 并获得结果

    java - android 将 Activity.this 传递给方法

    android - 如何将抽屉导航添加到我现有的代码中?

    Android Studio 构建错误 - "Failed to resolve: monitor"

    java - Android Studio 中的错误?无法访问子类中的 protected 成员

    android - Retrofit2+Kotlin 如何在获取响应作为数据类时查看原始 json

    Android ADB 设备未经授权