代码之家  ›  专栏  ›  技术社区  ›  achicn3

firebase setvalue crash安卓工作室

  •  1
  • achicn3  · 技术社区  · 7 年前

    我有课

        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()会使程序崩溃

    我查看了日志,发现了错误信息

    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 音频记录对象。

    我在网上搜索了一下,帖子说我必须在androidmanifest.xml中添加录制音频权限。 所以我把这行添加到我的清单中 this line

    更新 这是我的androidmanifest.xml AndroidManifest.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]);
    

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

    那么,我如何修改我的程序来做我想做的?

    1 回复  |  直到 7 年前
        1
  •  0
  •   PushpikaWan    7 年前

    您需要添加此行 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 以及录制和保存音频。

    这些线路还不够安卓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;
        }
    }
    
    推荐文章