【问题标题】:firebase setvalue crash android studiofirebase setvalue崩溃android工作室
【发布时间】:2018-10-14 04:59:53
【问题描述】:

我有课

    public class Expense{
        public String date;
        public String item;
        public int price;
        public Expense(){}
        public Expense(String date,String item,int price){
            this.date = date;
            this.item = item;
            this.price = price;
        }

        public void setDate(String date) {
            this.date = date;
        }
        public void setItem(String item){
            this.item = item;
        }
        public void setPrice(int price) {
            this.price = price;
        }
        public int getPrice() {
            return price;
        }
        public String getDate() {
            return date;
        }
        public String getItem() {
            return item;
        }
     }

还有一个函数

public void createByDB(String[] data,int[] price ,int size,int[] pick){
    //String []data looks like ={"apple","banana","candy"....}
    //int []price looks like ={18,20,25,....}
    //size = the size of int[] pick
    //int[]pick looks like = {0,1,4,...} ,the numbers in this array is randomly pick,and the number won't excess the size of data and price
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("details");
    Calendar c = Calendar.getInstance();
    String date = c.get(Calendar.YEAR)+"/"+c.get(Calendar.MONTH)+"/"+c.get(Calendar.DAY_OF_MONTH);
    for(int i=0;i<size;i++) {
        Expense expense = new Expense(date,data[pick[i]],price[pick[i]]);
        myRef.push().setValue(expense);
    }
}

我不知道为什么如果我调用 createByDB() 会使我的程序崩溃

我检查了我的 Logcat 并发现了错误消息

2018-10-14 12:21:13.832 2236-27737/com.google.android.googlequicksearchbox:搜索 E/AudioRecord-JNI:创建 AudioRecord 实例时出错:初始化 检查失败,状态为 -12。 2018-10-14 12:21:13.832 2236-27737/com.google.android.googlequicksearchbox:搜索 E/android.media.AudioRecord:初始化本机时错误代码-20 AudioRecord 对象。

我用谷歌搜索了它,帖子说我必须将 RECORD_AUDIO 权限添加到我的 AndroidManifest.xml 所以我将此行添加到我的清单中 this line

更新这是我的 AndroidManifest.xmlAndroidManifest.xml

但是当我调用 createdByDB() 时我的程序仍然崩溃

我不知道我哪里做错了。有人可以给我任何建议吗?谢谢!

更新: 如果我编辑

    for(int i=0;i<size;i++) {
        Expense expense = new Expense(date,data[pick[i]],price[pick[i]]);
        myRef.push().setValue(expense);
    }

到这里

        Expense expense = new Expense(date,data[1],price[1]);
        myRef.push().setValue(expense);

好用,我试过了

    for(int i=0;i<size;i++)System.out.println("pick:"+pick[i]);

检查我是否超出了数据和价格的大小,但答案是否定的

那么,我怎样才能修改我的程序来做我想做的事呢?

【问题讨论】:

  • 这些日志似乎是针对不同的应用程序的,并且您发布的代码不需要 RECORD_AUDIO 权限。可以从logcat 窗口的下拉菜单中选择“仅显示选定的应用程序”吗?它应该在右上角。
  • @TheGamer007 哦,我发现了我的错误,数据大小和价格都是 35,但我的选择数组中有时会包含数字“35”。所以超出了数组的大小。谢谢你。我解决了。

标签: android firebase


【解决方案1】:

你需要添加这一行 &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; 以及录制和保存音频。

这些行不足以支持 Android 6.0 及更高版本的设备。在做任何录音相关的事情之前,请为您的应用程序添加这种类型的权限请求。

    private void checkPermissions() {

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

    }

}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {

    switch (requestCode) {

        case 1:
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.RECORD_AUDIO}, 2);
            break;

        default:
            break;
    }
}

【讨论】:

  • 你试过检查权限和请求权限的方法吗?
  • and...我的整个程序中没有任何关于录制的功能,我不知道为什么错误消息显示AudioRecord。
  • 我在我的帖子中更新了关于我的 AndroidManifest.xml 的详细信息
  • for(int i=0;i pick[i] && price.length > pick[i]){ Expense costs = new Expense(date ,数据[pick[i]],价格[pick[i]]); myRef.push().setValue(费用); } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多