我正在尝试使用Rest Webservice。因为我无法在UI线程中执行网络操作所以我尝试使用AsyncTask执行此操作。下面是我的AsyncTask的代码
public static String makeRestRequest(String url) throws MalformedURLException,IOException {
String response="";
URL restUrl= new URL(url);
HttpURLConnection connection=(HttpURLConnection)restUrl.openConnection();
InputStream is=new BufferedInputStream(connection.getInputStream());
response=convertStreamToString(is);
return response;
}
CallmeService.getAllService()提供了一个服务层,最终调用方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
setContentView(R.layout.activity_home);
this.optionsList=(ListView)findViewById(R.id.optionsList);
//String[] options={"Teacher","Plumber","Electricians"};
ArrayAdapter adapter=getServiceMenu();
this.optionsList.setAdapter(adapter);
optionsList.setOnItemClickListener(this);
}
private ArrayAdapter getServiceMenu()
{
ArrayAdapter adapter= null;
try {
List<Service> menuServices= new CallMeServiceAsyncTask().execute("").get();
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, menuServices);
}
catch(Exception x)
{
x.printStackTrace();
}
return adapter;
}
现在我从我的活动的onCreate方法调用我的任务,如下所示
def file_changed ( file_chooser_widget: FileChooser )
file:File = File.new_for_uri(file_chooser_widget.get_uri())
try
info:FileInfo = file.query_info (FileAttribute.ACCESS_CAN_WRITE, FileQueryInfoFlags.NONE, null)
message ("after info")
writable: bool = info.get_attribute_boolean (FileAttribute.ACCESS_CAN_WRITE)
if writable is false
_entry.set_sensitive (false)
except e: Error
print e.message
我是Android开发的新手,无法弄清楚上面代码的问题。请帮帮我。 如果您需要更多代码来理解,请告诉我。
答案 0 :(得分:2)
在结尾处删除get()
电话:
new CallMeServiceAsyncTask().execute("").get();
这阻止了主应用程序线程。
相反,请在ArrayAdapter
的{{1}}中设置onPostExecute()
。
或者,使用普通线程而不是AsyncTask
,并使用事件总线将Web服务结果传递到UI层,正如我在this sample app中演示的那样。
或者,使用提供更新HTTP API的库,就像OkHttp一样,它使异步HTTP操作更容易,正如我在this sample app中演示的那样。
或者,切换到像Retrofit这样的库,这使得异步REST Web服务调用更容易,正如我在this sample app中演示的那样。