Android 如何将ListView项目保存到csv文件
ListView的每一行包含5个字符串,用分号分隔,如下所示:Android 如何将ListView项目保存到csv文件,android,csv,listview,Android,Csv,Listview,ListView的每一行包含5个字符串,用分号分隔,如下所示: str1; str2; str3; str4; str5 列表的记录长度可能会有所不同,有时可能达到400 如何将列表保存到CSV文件(在设备的内部存储器中,应用程序文件夹路径中) 使用ArrayAdapter: private static MainActivity inst; ArrayList<String> inList = new ArrayList<String>(); L
str1; str2; str3; str4; str5
列表的记录长度可能会有所不同,有时可能达到400
如何将列表保存到CSV文件(在设备的内部存储器中,应用程序文件夹路径中)
使用ArrayAdapter:
private static MainActivity inst;
ArrayList<String> inList = new ArrayList<String>();
ListView myList;
ArrayAdapter arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myList = (ListView) findViewById(R.id.dataList);
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, inList);
myList.setAdapter(arrayAdapter);
}
private static main activity inst;
ArrayList inList=新的ArrayList();
列表视图myList;
ArrayAdapter ArrayAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myList=(ListView)findViewById(R.id.dataList);
arrayAdapter=新的arrayAdapter(这是android.R.layout.simple\u list\u item\u 1,inList);
myList.setAdapter(arrayAdapter);
}
ListView中的示例数据:
商店1;橙色10; 200;2000
商店2;橙色8.150;1200
商店3;柠檬;20;100;2000年我准备了一个活动样本供您参考
public class MainActivity extends Activity {
ArrayList<String> listDataArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String line1 = "Shop1; orange; 10; 200;2000";
String line2 = "Shop2;orange;8;150;1200";
String line3 = "Shop3;lemon;20;100;2000";
listDataArray = new ArrayList<>();
listDataArray.add(line1);
listDataArray.add(line2);
listDataArray.add(line3);
ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listDataArray);
((ListView) findViewById(R.id.listviewData)).setAdapter(arrayAdapter);
}
public void processCSV(View view) {
try {
boolean writePermissionStatus = checkStoragePermission(false);
//Check for permission
if (!writePermissionStatus) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return;
} else {
boolean writePermissionStatusAgain = checkStoragePermission(true);
if (!writePermissionStatusAgain) {
Toast.makeText(this, "Permission not granted", Toast.LENGTH_LONG).show();
return;
} else {
//Permission Granted. Export
exportDataToCSV();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String toCSV(String[] array) {
String result = "";
if (array.length > 0) {
StringBuilder sb = new StringBuilder();
for (String s : array) {
sb.append(s.trim()).append(",");
}
result = sb.deleteCharAt(sb.length() - 1).toString();
}
return result;
}
private void exportDataToCSV() throws IOException {
String csvData = "";
for (int i = 0; i < listDataArray.size(); i++) {
String currentLIne = listDataArray.get(i);
String[] cells = currentLIne.split(";");
csvData += toCSV(cells) + "\n";
}
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
String uniqueFileName = "FileName.csv";
File file = new File(directory, uniqueFileName);
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(csvData);
fileWriter.flush();
fileWriter.close();
Toast.makeText(MainActivity.this, "File Exported Successfully", Toast.LENGTH_SHORT).show();
}
private boolean checkStoragePermission(boolean showNotification) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
if (showNotification) showNotificationAlertToAllowPermission();
return false;
}
} else {
return true;
}
}
private void showNotificationAlertToAllowPermission() {
new AlertDialog.Builder(this).setMessage("Please allow Storage Read/Write permission for this app to function properly.").setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
}).setNegativeButton("Cancel", null).show();
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/listviewData"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:onClick="processCSV"
android:text="Export CSV" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这是一个非常广泛的问题。您可以发布一些代码示例供我们查看。但是,为了让您了解情况,ListView中的所有数据都必须存在于适配器中。我建议您从适配器获取所有数据,将内容拆分为代码>分隔符,然后通过附加,
作为分隔符重新创建CSV。最后,您可以将此数据导出到文件以获取CSV。使用这种方法,它与记录长度无关。@@Atish,我包括了ArrayAdapter脚本。你能把你的想法写进代码吗?我也需要样本数据@@Atish,请查看我包含的样本数据@@Atish,从哪里调用processCSV?这是视图中的一个按钮单击方法。现在,什么都没有发生。然后,我尝试使用getProcessCSV()调用processCSV,但没有传递用于保存文件的帐户我想知道清单中是否缺少某些使用权限@@Atish,它在实际设备上确实有效,非常好!可能是我使用的模拟器有问题