Java AsyncTask android-ExecutionException错误
我的主类中有以下代码:Java AsyncTask android-ExecutionException错误,java,android,android-asynctask,Java,Android,Android Asynctask,我的主类中有以下代码: public class vurlDownloader extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... params) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext =
public class vurlDownloader extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://url/video.html");
HttpResponse response = null;
try {
response = httpClient.execute(httpGet, localContext);
} catch (IOException e) {
e.printStackTrace();
}
String result = "";
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()
)
);
} catch (IOException e) {
e.printStackTrace();
}
String line = null;
try {
while ((line = reader.readLine()) != null){
result += line + "\n";
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
public String loadVurl(){
String output = new vurlDownloader().execute().get();
return output;
}
公共类vurlDownloader扩展异步任务{
@凌驾
受保护字符串doInBackground(无效…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpContext localContext=新的BasicHttpContext();
HttpGet HttpGet=新的HttpGet(“http://url/video.html");
HttpResponse响应=null;
试一试{
response=httpClient.execute(httpGet,localContext);
}捕获(IOE异常){
e、 printStackTrace();
}
字符串结果=”;
BufferedReader reader=null;
试一试{
读卡器=新的BufferedReader(
新的InputStreamReader(
response.getEntity().getContent()
)
);
}捕获(IOE异常){
e、 printStackTrace();
}
字符串行=null;
试一试{
而((line=reader.readLine())!=null){
结果+=行+“\n”;
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回结果;
}
}
公共字符串loadVurl(){
字符串输出=新vurlDownloader().execute().get();
返回输出;
}
在这行中String output=new vurlDownloader().execute().get()代码>
Android Studio给了我奇怪的参考(红色下划线):
未处理的异常:java.lang.InterruptedException,java.util.concurrent.Execution.Exception
我不太明白这一点,因为我和这里的情况很相似:对这个人来说,这是可行的
你好 get()
抛出java.lang.InterruptedException。你需要试着接住,接住那些
但是您不应该使用get
,因为它会阻塞等待结果的ui线程。这使得AsyncTask不再是异步的
解决方案
new vurlDownloader().execute()
如果Asynctask是内部类,或者使用接口作为对活动的回调,则可以在onPostExecute
中更新ui
检查布莱克贝尔的答案@
建议:遵循java命名约定,使用vurlDownloader()
重命名vurlDownloader()
。类名以大写字母开头
编辑:
援引
vurlDownloader().execute();
然后
class vurlDownloader()扩展了异步任务
{
@凌驾
受保护字符串doInBackground(无效…参数){
字符串_response=null;
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpContext localContext=新的BasicHttpContext();
HttpGet HttpGet=新的HttpGet(“http://informat.net.pl/krachapp/video.html");
HttpResponse响应=null;
response=httpClient.execute(httpGet,localContext);
_response=EntityUtils.toString(response.getEntity());
}捕获(IOE异常){
e、 printStackTrace();
}
返回响应;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
Log.i(“结果为”,结果);
}
}
get()
抛出java.lang.InterruptedException。你需要试着接住,接住那些
但是您不应该使用get
,因为它会阻塞等待结果的ui线程。这使得AsyncTask不再是异步的
解决方案
new vurlDownloader().execute()
如果Asynctask是内部类,或者使用接口作为对活动的回调,则可以在onPostExecute
中更新ui
检查布莱克贝尔的答案@
建议:遵循java命名约定,使用vurlDownloader()
重命名vurlDownloader()
。类名以大写字母开头
编辑:
援引
vurlDownloader().execute();
然后
class vurlDownloader()扩展了异步任务
{
@凌驾
受保护字符串doInBackground(无效…参数){
字符串_response=null;
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpContext localContext=新的BasicHttpContext();
HttpGet HttpGet=新的HttpGet(“http://informat.net.pl/krachapp/video.html");
HttpResponse响应=null;
response=httpClient.execute(httpGet,localContext);
_response=EntityUtils.toString(response.getEntity());
}捕获(IOE异常){
e、 printStackTrace();
}
返回响应;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
Log.i(“结果为”,结果);
}
}
尝试以这种方式实现您的异步任务,您可以将结果
字符串放入onPostExecute()
作为onBackground(…)
方法返回
private class vurlDownloader() extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
String _result= null;
try {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://informat.net.pl/krachapp/video.html");
HttpResponse response = null;
response = httpClient.execute(httpGet, localContext);
_result = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
} catch (InterruptedException e) {
Log.e("LongOperation", "Interrupted", e);
return "Interrupted";
}
return _result;
}
@Override
protected void onPostExecute(String result) {
system.out.print(result);
}
}
转到此处了解更多信息:尝试以这种方式实现您的异步任务,您可以将结果
字符串作为onPostExecute()
onBackground(…)
方法返回
private class vurlDownloader() extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
String _result= null;
try {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://informat.net.pl/krachapp/video.html");
HttpResponse response = null;
response = httpClient.execute(httpGet, localContext);
_result = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
} catch (InterruptedException e) {
Log.e("LongOperation", "Interrupted", e);
return "Interrupted";
}
return _result;
}
@Override
protected void onPostExecute(String result) {
system.out.print(result);
}
}
转到此处了解更多信息:在异步任务中添加后期执行方法
@Override
protected void onPostExecute(String result) {
Log.d("RESULT", "Result : " + result);
finalResult = result; // here finalResult is string variable declared at class level
}
添加另一个返回异步任务最终结果的方法
public String getFinalResult() {
return finalResult;
}
当您需要最终结果时,可以使用getFinalResult方法来获取。在异步任务中添加后期执行方法
@Override
protected void onPostExecute(String result) {
Log.d("RESULT", "Result : " + result);
finalResult = result; // here finalResult is string variable declared at class level
}
添加另一个返回异步任务最终结果的方法
public String getFinalResult() {
return finalResult;
}
当您需要最终结果时,可以使用getFinalResult方法来获取。您是否可以提供更详尽的堆栈跟踪,以查看失败的地方。另外,“Void”可能被认为是一种类型,而您可能指的是“Void”,我不确定它是异步的