我的应用程序中有一个AsyncTask,它创建了一个HttpURLConnection。接下来,它调用getOutputStream(),写入一些字节,刷新并关闭。然后它调用getResponseCode()和getInputStream()。如果我需要发布代码,我可以,但我认为我的问题很小。
当我第一次运行时,我得到一个200响应代码,我得到了正确的输入流。
当我第二次到第五次运行时,我得到一个新线程(在DDMS视图中可见),并且在获取输入流时收到500响应代码和IOException。
当我第六次或更多次调用时,没有创建新线程,我仍然得到500响应代码和IOException。
我在这里可以找到什么?它总是工作一次,永远不会再次。有没有人见过这个?我完全难过了。
这是MINIMAL代码(我删除了try / catch,变量声明,app特定的东西等):
protected String doInBackground(String... params)
{
connectURL = new URL(sWebPath);
conn = (HttpURLConnection)connectURL.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setConnectTimeout(10000);
conn.setRequestMethod("POST");
conn.setRequestProperty("User-Agent", "MyAppAgent");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
// Setup my post as a string s.
conn.setRequestProperty("Content-Length", String.valueOf(s.length()));
conn.connect();
DataOutputStream dataStream = new DataOutputStream(conn.getOutputStream());
dataStream.writeBytes(s);
dataStream.flush();
dataStream.close();
dataStream = null;
// 200 1st time only, 500 after that.
responseCode = conn.getResponseCode();
// Works 1st time only, IO error after that
DataInputStream dis = new DataInputStream(conn.getInputStream());
byte[] data = new byte[16384];
int len = dis.read(data, 0, 16384);
dis.close();
conn.disconnect();
response = new String(data, 0, len);
// do whatever with my response
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
// Now I call a Toast message on the original context used to
// create this AsyncTask.
}
// The onClickListener of a button calls this AsyncTask (TierRequest class) with only two lines
TierRequest t = new TierRequest(WhateverMyCurrentActivityIs.this);
t.execute(A_Constant_Indicating_The_Type_Of_Post);
答案 0 :(得分:1)
这真的感觉就像服务器上的一个问题(代码500几乎普遍用于指示服务器端代码中的某种问题,尽管它可能是Web服务器本身的问题)。
您是否控制服务器代码?您是否可能打开文件而不关闭它,以便其他调用可能会遇到“拒绝访问”或“文件已打开”错误?