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”,我不确定它是异步的