我有一个请求响应 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/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格: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
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
鉴于我有以下迁移: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
我正在为一个项目制作一个简单的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"
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re