【问题标题】:How to save sqlite db file of another android application.?如何保存另一个android应用程序的sqlite db文件。?
【发布时间】:2014-04-13 11:10:57
【问题描述】:

我为我们公司的销售人员开发了应用程序。他们中的大多数人在农村地区进行销售,更多时候这些地区没有信号。然后他们告诉我们他们将他们的销售同步到服务器。但是更多的销售细节丢失了。 然后我尝试开发工具作为我的应用程序的第三方工具,以将本地数据库文件保存到手机内部存储器。然后我们可以通过电子邮件获取它。这里是代码

    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();
        Toast.makeText(getApplicationContext(), "SD Card Detecting ", Toast.LENGTH_SHORT).show();
        if (sd.canWrite()) {
            Toast.makeText(getApplicationContext(), "Backup is writing to SD card", Toast.LENGTH_SHORT).show();
            String currentDBPath = "//data//com.lk.lankabell.android.activity//databases//TSRDBNEW";
            String backupDBPath = "TSRDBNEW-Backup";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
                Toast.makeText(getApplicationContext(), "Backup is successful to SD card", Toast.LENGTH_SHORT).show();
            }
        }
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), "Backup is un-success to SD card", Toast.LENGTH_SHORT).show();
    }

我使用了我的主应用 [android+ksoap+axis2] 技术。

请建议我实现这个。我尝试使用上面的代码。但它不起作用。它也需要 sd 卡。我的数据库 url 有任何问题吗?

【问题讨论】:

  • 尝试使用此方法获取数据库路径:getDatabasePath("TSRDBNEW")
  • 编辑:我错过了一个重要的细节:是同一个应用程序。一个不错的选择是使用数据库中的 SQLiteOpenHelper,然后使用适配器进行查询。
  • 亲爱的 LuS。我必须在哪里添加您的代码片段。请您添加作为答案。?
  • @PriyanRockZ 将 String currentDBPath = ... 替换为: File dbFile = getApplicationContext().getDatabasePath("TSRDBNEW");然后 String currentDBPath = dbFile.getAbsolutePath();希望这会有所帮助

标签: java android android-sqlite axis2


【解决方案1】:

您无法轻易地从任何应用程序的数据“私人”文件夹中“获取”文件。最好的方法是,当您从类创建/更新/删除到数据库时,创建一个获取所需信息的新查询,将其保存为字符串,然后将其保存在 sdcard 中的 txt 文件或 json 文件中,或您想要的某种格式。使用 CSV 格式可能是一个可能的解决方案(没有数据库模型不能做更多):

public void generateTXTOnSD(String[] lines_txt) 
{
    // lines_txt contains an array of each register in CSV format.
    try
    {
        File root = new File(Environment.getExternalStorageDirectory(),"NameOfDirectoryYouWantToSave");
        if (!root.exists()) 
        {
            root.mkdirs();
        }
        Calendar cal = Calendar.getInstance();
        // I made this to no override early versions of data I have stored.
        String hour= String.valueOf(cal.get(cal.HOUR_OF_DAY))+"_"+String.valueOf(cal.get(cal.MINUTE))+"_"+String.valueOf(cal.get(cal.SECOND));
        File txtfile = new File(root, name_txt+hour+".txt");
        FileWriter writer = new FileWriter(txtfile);
        //Every line contain the info you want to save
        for (String line_txt : lines_txt) {
            writer.append(line_txt);
            writer.append('\r');
            writer.append('\n');

        }
        writer.flush();
        writer.close();


    }
    catch(IOException e)
    {
        // ERROR

    }
} 

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多