首页 \ 问答 \ 在Firebase数据库中单击AlertDialog以setValue时出错(Error when clicking AlertDialog to setValue at Firebase database)

在Firebase数据库中单击AlertDialog以setValue时出错(Error when clicking AlertDialog to setValue at Firebase database)

我试图在AlertDialog中选择一个选项,但它显示一个错误。 以下是错误:

10-17 00:54:44.765 25600-25600/com.example.jingwen.bluetoothlowenergy E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jingwen.bluetoothlowenergy, PID: 25600
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.example.jingwen.bluetoothlowenergy.MainActivity$1$1.onClick(MainActivity.java:325)
at android.support.v7.app.AlertController$AlertParams$3.onItemClick(AlertController.java:959)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3063)
at android.widget.AbsListView$3.run(AbsListView.java:3881)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5237)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)

这是发生错误的代码,特别是Firebase数据库的setValue部分:

private void alertdialog()
    {
        final CharSequence peers[] = new CharSequence[] {"Home", "School", "Children"};
        stopScan();
        final String uid = firebaseAuth.getCurrentUser().getUid();
        if(alert11!=null && alert11.isShowing()) return;
        AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
        builder1.setMessage("Add this device to peer list?");
        builder1.setCancelable(true);

        builder1.setNegativeButton(
                "Yes",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        AlertDialog.Builder pbuilder = new AlertDialog.Builder(MainActivity.this);
                        pbuilder.setTitle("Set peer as:");
                        pbuilder.setCancelable(false);
                        pbuilder.setItems(peers, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // the user clicked on option[which]
                                if(which == 0) {
                                    databaseRef.child("users").child(uid).child("Peer list").child(mBTDevicesArrayList.get(post).getAddress()).setValue("Home");
                                    Toast.makeText(MainActivity.this,"Set peer as 'Home'",Toast.LENGTH_SHORT).show();
                                    Toast.makeText(MainActivity.this,"Peer list updated!",Toast.LENGTH_SHORT).show();
                                }
                                if(which == 1) {
                                    databaseRef.child("users").child(uid).child("Peer list").child(mBTDevicesArrayList.get(post).getAddress()).setValue("School");
                                    Toast.makeText(MainActivity.this,"Set peer as 'School'",Toast.LENGTH_SHORT).show();
                                    Toast.makeText(MainActivity.this,"Peer list updated!",Toast.LENGTH_SHORT).show();
                                }
                                if(which == 2) {
                                    databaseRef.child("users").child(uid).child("Peer list").child(mBTDevicesArrayList.get(post).getAddress()).setValue("Children");
                                    Toast.makeText(MainActivity.this,"Set peer as 'Children'",Toast.LENGTH_SHORT).show();
                                    Toast.makeText(MainActivity.this,"Peer list updated!",Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                        pbuilder.show();

                    }
                });

请告诉我是否有更多部分代码需要显示。


I tried to select an option at AlertDialog but it shows an error. Below is the error:

10-17 00:54:44.765 25600-25600/com.example.jingwen.bluetoothlowenergy E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jingwen.bluetoothlowenergy, PID: 25600
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.example.jingwen.bluetoothlowenergy.MainActivity$1$1.onClick(MainActivity.java:325)
at android.support.v7.app.AlertController$AlertParams$3.onItemClick(AlertController.java:959)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3063)
at android.widget.AbsListView$3.run(AbsListView.java:3881)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5237)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)

This is the code where the error occurs, specifically the setValue part to Firebase database :

private void alertdialog()
    {
        final CharSequence peers[] = new CharSequence[] {"Home", "School", "Children"};
        stopScan();
        final String uid = firebaseAuth.getCurrentUser().getUid();
        if(alert11!=null && alert11.isShowing()) return;
        AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
        builder1.setMessage("Add this device to peer list?");
        builder1.setCancelable(true);

        builder1.setNegativeButton(
                "Yes",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        AlertDialog.Builder pbuilder = new AlertDialog.Builder(MainActivity.this);
                        pbuilder.setTitle("Set peer as:");
                        pbuilder.setCancelable(false);
                        pbuilder.setItems(peers, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // the user clicked on option[which]
                                if(which == 0) {
                                    databaseRef.child("users").child(uid).child("Peer list").child(mBTDevicesArrayList.get(post).getAddress()).setValue("Home");
                                    Toast.makeText(MainActivity.this,"Set peer as 'Home'",Toast.LENGTH_SHORT).show();
                                    Toast.makeText(MainActivity.this,"Peer list updated!",Toast.LENGTH_SHORT).show();
                                }
                                if(which == 1) {
                                    databaseRef.child("users").child(uid).child("Peer list").child(mBTDevicesArrayList.get(post).getAddress()).setValue("School");
                                    Toast.makeText(MainActivity.this,"Set peer as 'School'",Toast.LENGTH_SHORT).show();
                                    Toast.makeText(MainActivity.this,"Peer list updated!",Toast.LENGTH_SHORT).show();
                                }
                                if(which == 2) {
                                    databaseRef.child("users").child(uid).child("Peer list").child(mBTDevicesArrayList.get(post).getAddress()).setValue("Children");
                                    Toast.makeText(MainActivity.this,"Set peer as 'Children'",Toast.LENGTH_SHORT).show();
                                    Toast.makeText(MainActivity.this,"Peer list updated!",Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                        pbuilder.show();

                    }
                });

Do tell me if there are more parts of the codes need to be shown.


原文:https://stackoverflow.com/questions/40073000
更新时间:2022-04-13 20:04

最满意答案

我不知道那里发生了什么(我只是用高度压缩的gzip文件重现了缓慢),但是一次解压缩的速度更快,如下所示:

def decompress(io, int_size = 3)
    array = Array.new(262144)
    i = 0
    io.rewind
    gz = Zlib::GzipReader.new(io)
    dec = gz.read
    seq = StringIO.new(dec, "rb")
    until seq.eof?
        buffer = seq.read(int_size)
        array[i] = buffer.unpack('C*').inject { |r, n| r << 8 | n }
        i += 1
    end
    array
end

更快的还是使用map而不是循环:

def decompress(io, int_size = 3)
    io.rewind
    gz = Zlib::GzipReader.new(io)
    dec = gz.read
    dec.unpack('C*').each_slice(int_size).to_a.map {|t| t.inject {|r,n| r << 8 | n}}
end

I'm not sure what's going on there (I reproduced the slowness only with a highly compressed gzip file), but decompressing all at once is faster, something like this:

def decompress(io, int_size = 3)
    array = Array.new(262144)
    i = 0
    io.rewind
    gz = Zlib::GzipReader.new(io)
    dec = gz.read
    seq = StringIO.new(dec, "rb")
    until seq.eof?
        buffer = seq.read(int_size)
        array[i] = buffer.unpack('C*').inject { |r, n| r << 8 | n }
        i += 1
    end
    array
end

Faster still would be to use map instead of a loop:

def decompress(io, int_size = 3)
    io.rewind
    gz = Zlib::GzipReader.new(io)
    dec = gz.read
    dec.unpack('C*').each_slice(int_size).to_a.map {|t| t.inject {|r,n| r << 8 | n}}
end

相关问答

更多
  • 使用gzip这是一个简单的方法: Python代码: import gzip content = "the quick brown fox" with gzip.open('fox.txt.gz', 'wb') as f: f.write(content) Clojure代码: (with-open [in (java.util.zip.GZIPInputStream. (clojure.java.io/input-stream " ...
  • 事实证明,zlib离gzip不远。 区别在于gzip有一个额外的标题。 要获得此标头,您可以像这样使用lua-zlib : local zlib = require "zlib" -- input: string -- output: string compressed with gzip function compress(str) local level = 5 local windowSize = 15+16 return zlib.deflate(level, windowSi ...
  • 我编写了一个基本的Java库来读/写PNG文件: http : //code.google.com/p/pngj/ 它不支持托盘图像,但除 [更新:它现在支持所有PNG变体]之外,它相当完整,简单,并且代码没有外部依赖性(即仅使用标准JSE API,其中包括zip解压缩)。 代码可用。 我想你可以用很少的努力将它移植到C上。 I've code once a basic Java library for reading/writing PNG files: http://code.google.com/p/ ...
  • 上述方法对我来说没有效果 我不断得到incorrect header check (Zlib::DataError)错误。 显然它假设你有一个标题,默认情况下,这可能并非总是如此。 我实施的工作是: require 'zlib' require 'stringio' gz = Zlib::GzipReader.new(StringIO.new(resp.body.to_s)) uncompressed_string = gz.read The above method didn't work fo ...
  • 要使用zlib解压缩gzip格式文件, inflateInit2 windowBits参数的windowBits调用为16+MAX_WBITS ,如下所示: inflateInit2(&stream, 16+MAX_WBITS); 如果你不这样做,zlib会抱怨坏的流格式。 默认情况下,zlib创建具有zlib头的流,而在inflate不能识别不同的gzip标题,除非你这么说。 虽然这是从zlib.h头文件的1.2.1版开始记录的,但它不在zlib手册中 。 从头文件: 对于可选的gzip解码, wind ...
  • 文档表明Ruby inflate类将解压缩compress2()的输出,该输出采用zlib格式。 我刚尝试过,它运行正常。 您的压缩数据可能无法完整地保存到Ruby。 The documentation indicates that the Ruby inflate class will decompress the output of compress2(), which is in the zlib format. I just tried it, and it works fine. Your com ...
  • 如果您使用的是不使用LF分隔符但CR + LF的平台,则可能需要以二进制模式打开文件以进行读取: File.open("file_compressed.gz", "rb") do |compressed| # ... end 这也应该避免将输入流解释为除8位二进制之外的任何内容。 请务必使用"wb"作为标志以相同的方式打开输出文件。 If you're on a platform that doesn't use LF delimiters, but CR+LF, you may need to op ...
  • 您可以使用IO #read从文件中读取任意长度的块。 require 'zlib' Zlib::GzipWriter.open('compressed_file.gz') do |gz| File.open(large_data_file) do |fp| while chunk = fp.read(16 * 1024) do gz.write chunk end end gz.close end 这将以16kb块的形式读取源文件,并将每个压缩块添加到输出流中。 根据您的环境 ...
  • 我不知道那里发生了什么(我只是用高度压缩的gzip文件重现了缓慢),但是一次解压缩的速度更快,如下所示: def decompress(io, int_size = 3) array = Array.new(262144) i = 0 io.rewind gz = Zlib::GzipReader.new(io) dec = gz.read seq = StringIO.new(dec, "rb") until seq.eof? buf ...
  • TArray和TMemoryStream之间的转换函数是错误的,因为您没有正确访问数组内容。 TArray是一个动态数组。 在调用TMemoryStream.Write()和TMemoryStream.Read() ,您传递的是TArray本身的内存地址,而不是TArray指向的数据的内存地址。 您需要引用TArray以获取正确的内存地址,例如: function ByteArrayToStream(const aContent: TArray): TMemoryStream; be ...

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。