AsyncTask を使用してファイルをアップロードするために HttpURLConnection を使用する 1 つのアクティビティ (MainActivity) があります。それはすべてうまく機能し、ダンディです。また、JSONParser と makeHttpRequest を使用して、アップロードされたすべてのファイルのリストを MySQL データベースに照会する別のアクティビティ (ListAllFilesActivity) もあります (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
リスト パラメータ = 新しい 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();
}