我有一个使用 HttpURLConnection 使用 AsyncTask 上传文件的活动 (MainActivity)。这一切都很好,花花公子。我还有另一个活动(ListAllFilesActivity),它使用带有 makeHttpRequest 的 JSONParser 来查询 MySQL 数据库以获取已上传的所有文件的列表(也使用 AsyncTask)。ListAllFilesActivity 活动也很有效。
我遇到的问题是,如果我从 MainActivity 开始为大文件上传文件,然后启动 ListAllFilesActivity 来查询数据库,则数据库查询将不会返回结果,直到 MainActivity 的 AsyncTask 完成上传文件(它只显示进度对话框,直到上传完成)。我猜这与等待“释放”连接有关。在 MainActivity 中上传文件时,有没有办法能够连接并从 ListAllFilesActivity 获取结果?
不确定要显示什么代码,但这里有一些片段。如果您需要更多,请告诉我。
MainActivity.java
fileInputStream = new FileInputStream(fileToUpload);
// open a URL connection to the Servlet
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
// Don't use a cached copy.
conn.setUseCaches(false);
// Use a post method.
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
if (Build.VERSION.SDK_INT > 13) {
// Needed to add this since the second attempt to upload a file would fail with an EOFException and IOException: null
// http://stackoverflow.com/questions/3352424/httpurlconnection-openconnection-fails-second-time
conn.setRequestProperty("Connection", "close");
}
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
// String to get length to use for setFixedLengthStreamingMode
conn.setFixedLengthStreamingMode(infoSize);
ListAllFilesActivity.java
列表参数 = new ArrayList(); // 从 URL 获取 JSON 字符串
params.add(new BasicNameValuePair("access_token", mAccessToken));
params.add(new BasicNameValuePair("gplus_id", mGPlusId));
params.add(new BasicNameValuePair("id", mId));
JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// Files found...dump them to HashMap
// Getting Array of Products
}
} catch (JSONException e) {
e.printStackTrace();
}