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
.
谢谢 :) !
您可以参考AssetManager
或ContextWrapper
等平台类,但无法使用public SDK构建,出现此类错误是正常的。对于应用程序开发,您不需要构建它们,它们由 SDK 和 Android 平台提供。
您发布的代码存在一些问题 - 如需帮助,请详细说明您需要帮助的问题。
我正在尝试在 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
.
谢谢 :) !
您可以参考AssetManager
或ContextWrapper
等平台类,但无法使用public SDK构建,出现此类错误是正常的。对于应用程序开发,您不需要构建它们,它们由 SDK 和 Android 平台提供。
您发布的代码存在一些问题 - 如需帮助,请详细说明您需要帮助的问题。