Android Studio 中的 ContextWrapper 和 AssetManager 错误

ContextWrapper and AssetManager Errors in Android Studio

我正在尝试在 Android Studio 中创建一个 Android 应用程序,使用 Java 将数据从 CSV 文件导入到 SQLite 数据库。问题是当我尝试使用代码从 CSV 文件中读取时:

第一次尝试:

import android.os.Build;
import androidx.annotation.RequiresApi;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;

@RequiresApi(api = Build.VERSION_CODES.O)
public class LocalFileParser extends ActivityHome {
  final static Path PATH = Paths.get("src\main\res\raw\recipescsv.csv");
  File file = new File(String.valueOf(PATH));
  BufferedReader buffer;
  String line ="";
  String [] str;

    public LocalFileParser() throws IOException {
          try {
              InputStream inputStream = getResources().openRawResource(R.raw.recipescsv);
              BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
              reader.readLine();
              while ((line = reader.readLine()) != null) {
                  str = line.trim().split(",");
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
          parseToDb();
    }

  private void parseToDb() {
      for(int i=0; i< str.length; i++) {
        System.out.println("This is the array of file: "+str[i]); //For testing

        Database db = new Database(getApplicationContext());
        int id = Integer.parseInt(str[0]), execTime = Integer.parseInt(str[9]), difRate= Integer.parseInt(str[10]);
        double calories = Double.parseDouble(str[6]);
        db.writeJSONtoTheDB(id,str[1],str[2],str[3],str[4],str[5],calories,str[7],null,execTime,difRate);
      }
    }
}

此尝试的错误如下(在 ContextWrapper.java 中):

第二次尝试:

import android.content.Context;
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 LocalFileParser extends ActivityHome {
        Context context;
        String fileName;
        List<String[]> rows = new ArrayList<>();

    public LocalFileParser(Context context, String fileName) {
        this.context = context;
        this.fileName = fileName;
    }

    public List<String[]> readCSV() throws IOException {
        InputStream is = context.getAssets().open(fileName);
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        String csvSplitBy = ",";

        br.readLine();

        while ((line = br.readLine()) != null) {
            String[] row = line.split(csvSplitBy);
            rows.add(row);
        }
        return rows;
    }
}

此尝试的错误如下(在 AssetManager.java 中):

项目的依赖项 (build.gradle(:app)) :

dependencies {
    implementation 'com.opencsv:opencsv:4.6'
    implementation 'com.android.support:support-annotations:28.0.0'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment:2.3.5'
    implementation 'androidx.navigation:navigation-ui:2.3.5'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    testImplementation 'junit:junit:4.13.2'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'com.squareup.okhttp:okhttp:2.5.0'
    implementation 'com.intellij:annotations:12.0@jar'
    implementation 'androidx.recyclerview:recyclerview:1.2.0'
    implementation 'de.hdodenhof:circleimageview:3.1.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}

Android Studio 无法解析某些导入(例如:Cannot resolve symbol 'AttrRes'),对于其他导入,它会显示以下消息 'android.annotation.NonNull' is not public in 'android.annotation'. Cannot be accessed from outside package.

谢谢 :) !

您可以参考AssetManagerContextWrapper等平台类,但无法使用public SDK构建,出现此类错误是正常的。对于应用程序开发,您不需要构建它们,它们由 SDK 和 Android 平台提供。

您发布的代码存在一些问题 - 如需帮助,请详细说明您需要帮助的问题。