Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 异步HttpRequest超时_Android_Android Asynctask_Request - Fatal编程技术网

Android 异步HttpRequest超时

Android 异步HttpRequest超时,android,android-asynctask,request,Android,Android Asynctask,Request,问题 我有一个从活动的OnCreate方法调用的AsyncTask任务。此任务发出http请求。HTTP请求挂起。执行下面代码中的“代码挂起”代码后,我在调试器中观察到异步线程一直在“运行”,并且从不返回任何内容 代码 以下是活动的OnCreate方法: protected void onCreate(Bundle savedInstanceState) { asyncRequest.delegate = this; super.onCreate(savedInstanceSta

问题

我有一个从活动的OnCreate方法调用的AsyncTask任务。此任务发出http请求。HTTP请求挂起。执行下面代码中的“代码挂起”代码后,我在调试器中观察到异步线程一直在“运行”,并且从不返回任何内容

代码

以下是活动的OnCreate方法:

protected void onCreate(Bundle savedInstanceState) {
    asyncRequest.delegate = this;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activty_attach);
    Button retakeButton = (Button) (findViewById(R.id.retake_button));

    retakeButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(AttachActivity.this, MainActivity.class);
            startActivity(intent);
        }
    });
    try {
        URL url;
        url = new URL("http://btl-cromwell:9000/api/engine/v1/version");
        asyncRequest.execute(url);
    } catch (Exception e) {
        Log.e(logtag, e.toString());
    }
}
注意,传递给异步任务的URL应该只返回包含接收请求的服务版本号的JSON

异步任务(asyncRequest)代码如下:

public class AsyncRequest extends AsyncTask<URL, Void, List<String>> {
    private String logtag = "AsyncRequestTask";
    public AsyncResponse delegate;
    List<String> projects = new ArrayList<String>();

    @Override
    protected void onPreExecute(){

        super.onPreExecute();
    }

    @Override
    protected List<String> doInBackground(URL... urls) {
            try {
            // Creating & connection Connection with url and required Header.
            HttpURLConnection urlConnection = (HttpURLConnection) urls[0].openConnection();
            urlConnection.setRequestProperty("Content-Type", "application/json");
            urlConnection.setRequestMethod("GET");   //POST or GET
            urlConnection.setRequestProperty("User-Agent", "Test");
            // CODE HANGS HERE
            int responseCode = urlConnection.getResponseCode();
            String responseMessage = urlConnection.getResponseMessage();
            projects.add(responseMessage);
            } catch (Exception e) {
                Log.e(logtag, e.toString());
            }
            return projects;
        }


    @Override
    protected void onPostExecute(List<String> result){
        delegate.processFinish(result);
    }
}
公共类AsyncRequest扩展了AsyncTask{
私有字符串logtag=“AsyncRequestTask”;
公共响应代表;
列表项目=新建ArrayList();
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护列表doInBackground(URL…URL){
试一试{
//使用url和所需标头创建连接(&C)。
HttpURLConnection urlConnection=(HttpURLConnection)URL[0]。openConnection();
setRequestProperty(“内容类型”、“应用程序/json”);
urlConnection.setRequestMethod(“GET”);//POST或GET
setRequestProperty(“用户代理”、“测试”);
//代码挂在这里
int responseCode=urlConnection.getResponseCode();
字符串responseMessage=urlConnection.getResponseMessage();
项目。添加(响应消息);
}捕获(例外e){
Log.e(logtag,e.toString());
}
返回项目;
}
@凌驾
受保护的void onPostExecute(列表结果){
委托。进程完成(结果);
}
}
一旦请求生效,我将使用我实际想要返回的内容填充projects变量,但现在我只是将其设置为responseMessage。我确信这与我不熟悉用Java发出请求有关,但我已经花了好几天的时间在这方面,弄不明白。非常感谢您的帮助

         asyncRequest.execute(url);
            asyncRequest.getStatus();
            String[] projects = asyncRequest.get();
无法同时执行.execute和.get()

由于永远不应该使用.get(),因此最好删除该语句


删除
asyncRequest.execute(url)之后的所有代码
并将该代码放入AsyncTask的onPostExecute中。

在哪里调用该try块?在哪个功能中?在onCreate()之外?你的onCreate()真是一团糟。我想我应该在开场白中说我是新来的,正在学习Android开发,所以如果它一团糟,那就是原因。通常我会尝试让事情正常进行,然后在之后清理代码。也许你必须添加urlConnection.connect();挂起的位置。尝试了,当我这样做时,urlConnection.connect()本身挂起。它挂起还是超时?我可以执行String[]projects=asyncRequest.execute(url);希望onPostExecute将结果传递到项目中?谢谢,我做了所有这些,但我仍然存在HttpURLConnection请求挂起的核心问题。然后请编辑您的帖子并显示您现在使用的代码。好的,我编辑了上面的内容,希望现在更清楚。我要求您将代码移动到onPostExecute。我什么也没看见。好的,有新的电话。你凭什么认为它挂着?