Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序在尝试打开两个DataInputStreams时挂起_Java_Android_Url_Inputstream_Datainputstream - Fatal编程技术网

Java Android应用程序在尝试打开两个DataInputStreams时挂起

Java Android应用程序在尝试打开两个DataInputStreams时挂起,java,android,url,inputstream,datainputstream,Java,Android,Url,Inputstream,Datainputstream,我正在编写这个应用程序,我需要同时打开两个InputStreams,并能够切换到任何一个流以流式传输图像。我可以打开第一条流,但当我试图打开第二条流时,它会挂起。下面是代码,我在代码挂起的地方做了评论,你能解释一下我是否做错了什么吗 public boolean Start() { numberOfServicesUsingThisInstanceLock.lock(); if (numberOfServicesUsingThisInstance >

我正在编写这个应用程序,我需要同时打开两个InputStreams,并能够切换到任何一个流以流式传输图像。我可以打开第一条流,但当我试图打开第二条流时,它会挂起。下面是代码,我在代码挂起的地方做了评论,你能解释一下我是否做错了什么吗

public boolean Start()
    {
        numberOfServicesUsingThisInstanceLock.lock();

        if (numberOfServicesUsingThisInstance > 0)
        {
            numberOfServicesUsingThisInstance++;
            return true; 
        }

        // else 
        numberOfServicesUsingThisInstance = 1;

        bisList.clear();
        disList.clear();        
        FrameTimeStampList.clear();

        try
        {
            for (int i = 0; i < this.objConfig.lstCameraInfo.size(); i++)
            {
                FrameTimeStampList.add(Long.valueOf("-1"));
                final CameraInfo ci = this.objConfig.lstCameraInfo.get(i);
                String sourceUrl = GetMjpegUrlForCam(this.Type, ci.brand, ci.ipAddress);

                Log.d("DUMPMJPEG_START", "URL: " + sourceUrl);

                if (sourceUrl == "NONE") continue;

                URL url = new URL(sourceUrl);               

                Authenticator.setDefault(new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication (ci.userName, ci.password.toCharArray());
                    }
                });

                Log.d("DUMPMJPEG_START", "OpenStream");
                InputStream in = url.openStream(); // CODE HANGS HERE
                Log.d("DUMPMJPEG_START", "Creating DataInputStream");
                DataInputStream dis = new DataInputStream(in);
                Log.d("DUMPMJPEG_START", "DataInputStream added to the DataInputStream List");

                Log.d("DUMPMJPEG_START", "adding BufferedInputStreams to the list");
                BufferedInputStream bis = new BufferedInputStream(dis);
                Log.d("DUMPMJPEG_START", "BufferendInputStreams added to the list");
                disList.add(dis);
                bisList.add(bis);
            }
        }
        catch(Exception ex)
        {
            ex.getMessage();
        }
        return false;       
    }
public boolean Start()
{
使用此InstanceLock.lock()的服务数量;
如果(numberOfServicesUsingThisInstance>0)
{
使用此实例的NumberOfServices++;
返回true;
}
//否则
numberOfServicesUsingThisInstance=1;
bisList.clear();
disList.clear();
FrameTimeStampList.clear();
尝试
{
for(int i=0;i
当你说它挂起时,在很长一段时间内你没有收到任何响应,或者你有没有收到异常

有关代码的更多信息:

  • 你打开溪流,但从不关闭它们。或者你会在你的应用程序的另一部分拥有控制权吗
  • 打开流而不使用某种连接超时是个坏主意
  • 异常不会打印任何内容,因为您应该使用e.printStackTrace()打印它,或者将消息发送到某个日志/输出

  • 我很长一段时间没有收到任何响应,也没有收到任何异常1)我有一个控制它们的应用程序的不同部分2)同意3)同意,但当我调试它时,这里没有出现异常。嗯,似乎你与服务器的连接有问题。当您从代码外部连接时,它是否工作?你是在Android模拟器上测试的吗?这个功能的单元测试怎么样?是的,我想是的,但我确定这不是连接问题,因为我可以打开第一个流,但不能打开第二个流!。不,我正在使用一个设备,如果你切换IP的顺序,第一个变成第二个,第二个变成第一个,它应该会以某种方式失败,看起来它真的无法连接。另一个想法是,Android有很多限制,你有没有检查过是否有一些你没有设置的Android权限?至少你应该在你的清单上有互联网权限。。。