jjzjj

java - 如何在不显示黑屏的情况下掩盖来自android服务器的响应所花费的时间?

coder 2023-12-22 原文

我有一个请求响应 Activity ,其中来自服务器的响应用于扩展动态布局,我的问题是第一个请求来得很快,第二个请求有延迟时间,所以有时屏幕会变黑。我已经试过这个link , 但帮助不大

下面是我现在使用的代码。

 ClientResource clientResource=new ClientResource(IP.IP+"/api/device/view_device/"+r_no);
       // ClientResource clientResource=new ClientResource("http://10.30.10.243:8080/api/device/view_device/101");

        clientResource.setChallengeResponse(ChallengeScheme.HTTP_BASIC,username, password);
        clientResource.get();
        Response response= clientResource.getResponse();
        System.out.println("Response from server is ----> "+response.getEntityAsText());
        text=response.getEntityAsText().toString();
        try {
            JSONObject obj = new JSONObject(text);
            JSONArray jArray = new JSONArray((String) obj.get("message"));
            System.out.println("\n String  is\t"+jArray+"\t\t");
            len=jArray.length();
            System.out.println("Length of Array is\t"+len);
            for (int i=0;i<len;i++){
                String dname=jArray.getJSONObject(i).getString("device_name").toUpperCase();
                 port= (String) jArray.getJSONObject(i).get("device_port");
                Rno=jArray.getJSONObject(i).getString("room_no");
                 dev_id=(String)jArray.getJSONObject(i).getString("device_id");
                String d_stat=(String)jArray.getJSONObject(i).get("device_control");
                cList.add(d_stat);
                list.add(dname);
                lis.add(port);
                stat.add(dev_id);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }


        if (len==0){Toast.makeText(Test.this, "No Devices Found For This Room", Toast.LENGTH_SHORT).show();
           /* Intent intent1=new Intent(Test.this,Landing_page.class);
            finish();
            startActivity(intent1);
*/
            LinearLayout r1 = new LinearLayout(this);
            r1.setBackgroundResource(R.drawable.border);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams
                    (LinearLayout.LayoutParams.MATCH_PARENT,90);
            r1.setPadding(0,10, 0, 0);
            r1.setLayoutParams(lp);

            TextView tv1 = new TextView(this);
            tv1.setTextColor(getResources().getColor(R.color.black));
            tv1.setText(" No Devices Found");
            tv1.setTextSize(30);
            tv1.setPadding(10,10,0,0);
            LinearLayout.LayoutParams tv1params = new LinearLayout.LayoutParams
                    (LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            tv1.setLayoutParams(tv1params);
            tv1.setGravity(View.TEXT_ALIGNMENT_CENTER);
            r1.addView(tv1);

            ll1.addView(r1);

        }
   try{
           ClientResource clientResource1=new ClientResource(IP.IP+"/api/resource/device_status/"+r_no+"/"+dev_id);



    System.out.println(IP.IP+"/api/resource/device_status/"+r_no+"/"+dev_id);

           //clientResource.setChallengeResponse(ChallengeScheme.HTTP_BASIC, username, password);
           clientResource1.get();
           Response response1= clientResource1.getResponse();
           System.out.println("Response from status server is ----> "+response1.getEntityAsText());
           String txt=response1.getEntityAsText().toString();


           try {
               JSONObject obj = new JSONObject(txt);
               JSONArray jArray = new JSONArray((String) obj.get("message"));
               System.out.println("\n String  is\t"+jArray+"\t\t");
               len1=jArray.length();
               System.out.println("Length of Second Array is\t"+len1);
               for (int i=0;i<len1;i++){
                   String dstat=jArray.getJSONObject(i).getString("Soft_status");
                   String istat=jArray.getJSONObject(i).getString("Inten_value");
                   list1.add(dstat);
                   list2.add(istat);
               }
           } catch (JSONException e) {
               e.printStackTrace();
           }}catch(Exception e){e.printStackTrace();}
       /* if (len1==0){
            progress.dismiss();
            Toast.makeText(getApplicationContext(),"Device Status not Obtained",Toast.LENGTH_LONG);
            list1.add("0");list1.add("0");list1.add("0");list1.add("0");list1.add("0");list1.add("0");list1.add("0");list1.add("0");
            list2.add("2");list2.add("2");list2.add("2");list2.add("5");list2.add("2");list2.add("2");list2.add("2");list2.add("2");
        }else{
            progress.dismiss();

            Toast.makeText(getApplicationContext(),"Devices Discovered",Toast.LENGTH_LONG);
        }

*/
        if (len1>0&&len>0){
            progress.dismiss();
        }

        System.out.println(cList.toString().toUpperCase());

      /*  LinearLayout.LayoutParams.WRAP_CONTENT*/
        for (int i = 0; i <list.size(); i++) {

            cnid=stat.get(i);

                LinearLayout layout = new LinearLayout(this);
            layout.setBackgroundResource(R.drawable.border);

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
                    (LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
           // params.setMargins(100, 15, 50, 0);

            layout.setLayoutParams(params);

            layout.setOrientation(LinearLayout.HORIZONTAL);

            layout.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
            layout.setPadding(30, 10, 0, 30);

                System.out.println(list);


            ImageView iv[];
            iv=new ImageView[len];
            iv[i]=new ImageView(this);
          String buffer=list.get(i);
            if (list1.get(i).equals("1")){
                flag=1;
                iv[i].setImageResource((Integer)dm.get(""+buffer.replace(" ","").toUpperCase()+""));
            }else if (list1.get(i).equals("0")){ flag=0;
         iv[i].setImageResource((Integer) hm.get(""+buffer.replace(" ","").toUpperCase()+""));}
            iv[i].setId(i+100);
            iv[i].setTag(list);
             LinearLayout.LayoutParams ivparams = new LinearLayout.LayoutParams
            (60, LinearLayout.LayoutParams.MATCH_PARENT);
            iv[i].setPadding(10,0,0,0);
         // ivparams.setMargins(0,0,0,0);
                iv[i].setLayoutParams(ivparams);
            if(list.get(i).equals("BULB")||list.get(i).equals("LED1")||list.get(i).equals("FAN"))
           {
               String d=list.get(i);
               System.out.println("\n\t\t:: Device Controllable ::" +i+
                       "\n");
                iv[i].setOnClickListener(HandleOnClick(d,iv[i],iv[i].getId()));
           }else if (list.get(i).equals("CFL")||list.get(i).equals("LED")){
                System.out.println("Device not Controllabe:: "+i);
            }

            layout.addView(iv[i]);


            TextView tv = new TextView(this);
            LinearLayout.LayoutParams tvparams = new LinearLayout.LayoutParams
                    (90, LinearLayout.LayoutParams.WRAP_CONTENT);
            tv.setLayoutParams(tvparams);
            tv.setPadding(27,27,27,27);                 //tv.setPadding(27,27,27,27);
            tvparams.setMargins(30, 0, 0, 0);
            tv.setTextSize(15);
           tv.setTextColor(getResources().getColor(R.color.black));
            //tv.setPadding(10,10,10,10);


            tv.setText(list  .get(i));
                layout.addView(tv);



            ToggleButton tb[];
            tb=new ToggleButton[len];
            tb[i]=new ToggleButton(this);

            LinearLayout.LayoutParams tbparams = new LinearLayout.LayoutParams
                    (60, 40);
            tbparams.setMargins(200, 5, 0, 0);
            tb[i].setBackgroundResource(R.drawable.bgtoggle);
               tb[i].setId(i);
            tb[i].setTextOff("off");
            tb[i].setTextOn("on");
            tb[i].setTextColor(getResources().getColor(R.color.transparent));
            tb[i].setTag(list.get(i));
            //tb[i].setPadding(4, 4, 4, 4);
            tb[i].setLayoutParams(tbparams);
           if (list1.get(i).equals("1")){
                tb[i].setChecked(true);
            }else if(list1.get(i).equals("0")) {
               flag=0;
               tb[i].setChecked(false);
           }

    tb[i].setOnCheckedChangeListener(handleOnClick(
            tb[i], tb[i].getId(),tb[i].getTag(),list ,lis,stat,iv[i],iv[i].getTag()));
            layout.addView(tb[i]);

            //Image View Loop
            ImageView Iv[];
            Iv=new ImageView[len];
            Iv[i]=new ImageView(this);
            Iv[i].setId(i+1);
              //ImageView Iv = new ImageView(context);
              Iv[i].setImageResource(R.drawable.enrgy);
              LinearLayout.LayoutParams Ivparams = new LinearLayout.LayoutParams
                      (60, 50);
              Ivparams.setMargins(150, 25, 0, 0);
              Iv[i].setLayoutParams(Ivparams);
            Iv[i].setOnClickListener(handleOnClick(Iv[i],r_no,dev_id,Iv[i].getId(),cntr,tb[i].getId()));
              layout.addView(Iv[i]);


            ll1.addView(layout);

        }

请指导。

最佳答案

你可以使用异步任务来做到这一点......

private class ClassName extends AsyncTask<Void, Void, Void>
{
     ProgressDialog pd = new ProgressDialog(SignUp.this);

     @Override
     protected void onPreExecute()
     {
            pd.setMessage("Please wait..");
            pd.setCancelable(false);
            pd.show();
   }

   @Override
   protected Void doInBackground(Void... arg0)
   {
    ..................................
    //your code for json calling -- Server call 1
    ..................................
    //use runOnUi thread to update ui
    ..................................

     runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // WORK on UI thread here
            }
        });

    ..................................
    //your code for json calling -- Server call 2
    ..................................
    //use runOnUi thread to update ui
    ..................................

    runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // WORK on UI thread here
            }
        });



       return null;
    }

    @Override
    protected void onPostExecute(Void result)
    {
      super.onPostExecute(result);

      if(pd.isShowing())
         pd.dismiss();
    }

关于java - 如何在不显示黑屏的情况下掩盖来自android服务器的响应所花费的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499065/

有关java - 如何在不显示黑屏的情况下掩盖来自android服务器的响应所花费的时间?的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  4. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  5. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  6. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  7. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  8. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  9. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  10. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

随机推荐