Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将ListView项目保存到csv文件_Android_Csv_Listview - Fatal编程技术网

Android 如何将ListView项目保存到csv文件

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

ListView的每一行包含5个字符串,用分号分隔,如下所示:

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,它在实际设备上确实有效,非常好!可能是我使用的模拟器有问题