Android:共享CSV文件

时间:2013-03-12 11:20:00

标签: android csv share

我的应用程序可以生成我想要共享的CSV文件。我使用的是MIME类型text/comma_separated_values/csv,但是当我发送Intent选择器时没有显示,我想我的设备不知道如何处理该文件。我应该使用哪种类型?

这是我的代码:

    Uri csv = lh.createDailyCSV();

    if(csv == null){
         Toast.makeText(this, getString(R.string.error_creating_csv), Toast.LENGTH_LONG).show();
    }
    else{
        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
        sharingIntent.setType("text/comma_separated_values/csv");
        sharingIntent.setData(csv); 
        startActivity(Intent.createChooser(sharingIntent, getResources().getText(R.string.send_to)));
    }   

我在我的清单中声明:

    <intent-filter>
        <action android:name="android.intent.action.SEND" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:mimeType="text/comma_separated_values/csv" />
    </intent-filter>

我得到了例外

03-12 12:19:23.430: E/ActivityThread(24011): Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@412fc920 that was originally registered here. Are you missing a call to unregisterReceiver()?

我已经读过这个例子,当选择器中没有或只有一个选项时会发生异常。

[编辑]

我改变了将数据附加到Intent的方式。我没有使用sharingIntent.setData(csv):

sharingIntent.putExtra(Intent.EXTRA_STREAM, csv);

现在选择器工作正常,但如果我尝试通过电子邮件发送文件,则会收到错误:文件无法显示。

[/编辑]

3 个答案:

答案 0 :(得分:13)

正确的MIME类型为text/csv。如果这不起作用,您可以使用text/plain,这将允许用户从批次的应用程序中进行选择,包括Evernote等。

更新更新后,您似乎不想与任意其他应用“共享”该文件,而只是通过电子邮件发送?请澄清。

答案 1 :(得分:0)

就我而言,以下内容适用于Goo:

http://SERVER-IP/demoapp/v2/mobile/message

答案 2 :(得分:0)

class CreateCompanyTableViewController: UITableViewController {
    @IBOutlet weak var lblNumberOfUser: UILabel!
    var newStakeholders: [ReadOrganizationStakeholder] = []
    
    @IBOutlet weak var companyUsersTableView: UITableView!
    var dataSource = NewUserDataSource(newStakeholders: self.newStakeholders)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        lblNumberOfUser.text = "\(newStakeholders.count) Users"
        companyUsersTableView.dataSource = dataSource
        companyUsersTableView.delegate = dataSource as! UITableViewDelegate
    }
}

class NewUserDataSource: NSObject, UITableViewDataSource {
    // We keep this public and mutable, to enable our data
    // source to be updated as new data comes in.
    var newStakeholders: [ReadOrganizationStakeholder]

    init(newStakeholders: [ReadOrganizationStakeholder]) {
        self.newStakeholders = newStakeholders
    }

    func tableView(_ tableView: UITableView,
                   numberOfRowsInSection section: Int) -> Int {
        return newStakeholders.count
    }

    func tableView(_ tableView: UITableView,
                   cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let stakeholders = newStakeholders[indexPath.row]
        let cell = tableView.dequeueReusableCell(
            withIdentifier: "newUserTableViewCell",
            for: indexPath
        ) as! NewUserTableViewCell

        

        cell.lblUsername.text  = stakeholders.fullName
        cell.lblEmail.text = stakeholders.emailAddress

        return cell
    }
}