Android HttpURLConnection和JSONParser同时连接

Android HttpURLConnection和JSONParser同时连接,android,json,httpurlconnection,Android,Json,Httpurlconnection,我有一个活动(MainActivity),它使用HttpURLConnection使用AsyncTask上传文件。这一切都很顺利。我还有另一个活动(ListAllFilesActivity),它使用带有makeHttpRequest的JSONParser查询MySQL数据库中已上载的所有文件的列表(也使用AsyncTask)。ListAllFilesActivity活动也非常有效 我遇到的问题是,如果我从MainActivity启动一个大文件的文件上载,然后启动ListAllFilesActiv

我有一个活动(MainActivity),它使用HttpURLConnection使用AsyncTask上传文件。这一切都很顺利。我还有另一个活动(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

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);
List params=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();
}

从以下文件中:

首次引入时,异步任务是在单个后台线程上串行执行的。从
DONUT
开始,它被更改为一个线程池,允许多个任务并行运行。从蜂巢开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误

如果确实需要并行执行,可以使用
THREAD\u POOL\u Executor
调用
executeOnExecutor(java.util.concurrent.Executor,Object[])


从以下文件中:

首次引入时,异步任务是在单个后台线程上串行执行的。从
DONUT
开始,它被更改为一个线程池,允许多个任务并行运行。从蜂巢开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误

如果确实需要并行执行,可以使用
THREAD\u POOL\u Executor
调用
executeOnExecutor(java.util.concurrent.Executor,Object[])


谢谢歌舞伎,很高兴知道。我没有想到这会是AsyncTask的一个限制。我想接下来的问题是:我是否应该使用线程/处理程序来进行文件上传(因为上传完成后实际上没有UI依赖关系)和获取列表的AsyncTask(因为上传完成后会填充UI)?从用户体验的角度来看,在查看其他活动的列表之前,不必等待文件上传完成,这将是一件好事。我是,但是第二个观点很好。你应该考虑这些上传的生命是否应该与UI绑定在一起。考虑到您建议不存在依赖关系,而且这是一项相当长的运行任务,因此在
服务
中执行此操作可能是有意义的,可能需要使用
IntentService
。感谢您的帮助!我会调查服务的。谢谢歌舞伎,很高兴知道。我没有想到这会是AsyncTask的一个限制。我想接下来的问题是:我是否应该使用线程/处理程序来进行文件上传(因为上传完成后实际上没有UI依赖关系)和获取列表的AsyncTask(因为上传完成后会填充UI)?从用户体验的角度来看,在查看其他活动的列表之前,不必等待文件上传完成,这将是一件好事。我是,但是第二个观点很好。你应该考虑这些上传的生命是否应该与UI绑定在一起。考虑到您建议不存在依赖关系,而且这是一项相当长的运行任务,因此在
服务
中执行此操作可能是有意义的,可能需要使用
IntentService
。感谢您的帮助!我会调查一下内部服务。