首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpURLConnection和JSONParser同时连接

HttpURLConnection和JSONParser同时连接
EN

Stack Overflow用户
提问于 2013-08-01 20:13:22
回答 1查看 467关注 0票数 0

我有一个活动(MainActivity),它使用HttpURLConnection来使用AsyncTask上传文件。一切都很好很好。我还有另一个活动(ListAllFilesActivity),它使用带有makeHttpRequest的JSONParser查询MySQL数据库,以获取已上载的所有文件的列表(也使用AsyncTask)。ListAllFilesActivity活动也非常有效。

我遇到的问题是,如果我从MainActivity开始一个大文件的文件上载,然后启动ListAllFilesActivity来查询数据库,数据库查询将不会返回结果,直到AsyncTask MainActivity已经完成上传文件(它只是显示进度对话框,直到上传完成)。我猜这与等待连接“释放”有关。当一个文件被上传到ListAllFilesActivity中时,是否有一种方法可以连接并获取MainActivity的结果?

不确定具体要显示什么代码,但是这里有一些代码片段。如果你需要更多,请告诉我。

MainActivity.java

代码语言:javascript
复制
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

List params =();//从URL获取JSON字符串

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 20:18:53

来自AsyncTask的文档

当第一次引入时,AsyncTasks是在单个后台线程上串行执行的。从DONUT开始,它被更改为一个线程池,允许多个任务并行操作。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。 如果您确实希望并行执行,则可以使用executeOnExecutor(java.util.concurrent.Executor, Object[])调用THREAD_POOL_EXECUTOR

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18003652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档