- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要将一些字符串的 Http 发布到 Web 服务。我正在使用 KSoap。
@Override
protected JSONObject doInBackground(JSONObject... params) {
String result;
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
int timeoutConnection = 30000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 50000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient httpclient = new DefaultHttpClient(httpParameters);
setupClient(httpclient);
//HttpURLConnection httpclient = new HttpURLConnection(_url);
Log.d(TAG, "Posting to ["+_url+"]");
HttpPost postdata = new HttpPost(_url);
...set up parameters
ResponseHandler<String> handler = new BasicResponseHandler();
Calendar c = Calendar.getInstance();
long start = c.getTimeInMillis();
try {
Log.d(TAG, "Starting post data call ["+_url+"]");
result = httpclient.execute(postdata,handler);
c = Calendar.getInstance();
long total = c.getTimeInMillis() - start;
Log.d(TAG, "Finished post data call ["+result+"] in ["+total+"] millis");
}catch(HttpResponseException e)
{
c = Calendar.getInstance();
long total = c.getTimeInMillis() - start;
Log.e(TAG, "HttpResponseException: ["+total+"] millis. There was a problem communicating: " + e.getMessage());
return null;
}catch (ClientProtocolException e) {
Log.e(TAG, "ClientProtocolException There was a problem getting to the service: " + e.getMessage());
return null;
} catch(SocketTimeoutException e){
Log.e(TAG, "SocketTimeoutException There was a problem connecting: " + e.getMessage());
return null;
} catch (IOException e) {
Log.e(TAG, "IOException There was a problem reading the data: " + e.getMessage());
return null;
}
catch(Exception e)
{
Log.e(TAG, "Exception An error occurred: " + e.toString());
return null;
}
httpclient.getConnectionManager().shutdown();
JSONObject resp = null;
try {
resp = new JSONObject(result);
} catch (JSONException e) {
resp = null;
e.printStackTrace();
}
Log.i(TAG, result.toString());
return resp;
}
所以这在我使用 Wifi 连接时工作正常,但使用 3G 会在 16 - 18 秒内失败并抛出 HttpResponseException。
我无法相信这是运行异步的 DefaultHttpClient 的问题,因为那样它也应该在 Wifi 上抛出错误。
编辑
Web 服务是用 C# 编写的,并使用 JSON 响应。
这里要求的是 logcat,在 18 秒内给出 HttpResponseException,正如我在原始问题中所说:
07-22 11:13:04.678: D/ProgressBar(26524): setProgress = 0<br/>
07-22 11:13:04.678: D/ProgressBar(26524): setProgress = 0, fromUser = false<br/>
07-22 11:13:04.678: D/ProgressBar(26524): mProgress = 0mIndeterminate = false, mMin = 0, mMax = 10000<br/>
07-22 11:13:31.968: D/GpsLocation(26524): Got location<br/>
07-22 11:13:32.018: D/WebService(26524): BASE ADDRESS [http://[SERVICEURL]]<br/>
07-22 11:13:32.023: D/ProgressBar(26524): setProgress = 0<br/>
07-22 11:13:32.023: D/ProgressBar(26524): setProgress = 0, fromUser = false<br/>
07-22 11:13:32.023: D/ProgressBar(26524): mProgress = 0mIndeterminate = false, mMin = 0, mMax = 10000<br/>
07-22 11:13:32.048: D/HttpPostWebServiceTask(26524): Posting to [http://[SERVICEURL]/Authentication/Authenticate]<br/>
07-22 11:13:32.053: D/HttpPostWebServiceTask(26524): Starting post data call [http://[SERVICEURL]/Authentication/Authenticate]<br/>
07-22 11:13:47.758: D/dalvikvm(26524): GC_CONCURRENT freed 258K, 17% free 8062K/9671K, paused 22ms+25ms, total 157ms<br/>
**07-22 11:13:50.728: E/HttpPostWebServiceTask(26524): HttpResponseException: [18671] millis. There was a problem communicating: Gateway Timeout**<br/>
07-22 11:13:50.778: D/GOT RESPONSE(26524): NULL RESPONSE FROM SERVER<br/>
07-22 11:13:50.778: E/HttpPostWebServiceTask(26524): Error invoking command: null<br/>
07-22 11:13:50.783: W/System.err(26524): java.lang.NullPointerException<br/>
07-22 11:13:50.793: W/System.err(26524): at com.app.webservices.WebService.checkValidResponse(WebService.java:82)<br/>
07-22 11:13:50.793: W/System.err(26524): at com.app.webservices.WebService.access$0(WebService.java:76)<br/>
07-22 11:13:50.793: W/System.err(26524): at com.app.webservices.WebService$1.execute(WebService.java:120)<br/>
07-22 11:13:50.793: W/System.err(26524): at com.app.webservices.WebService$1.execute(WebService.java:1)<br/>
07-22 11:13:50.793: W/System.err(26524): at com.blm.android.webservice.HttpPostWebServiceTask.onPostExecute(HttpPostWebServiceTask.java:226)<br/>
07-22 11:13:50.793: W/System.err(26524): at com.blm.android.webservice.HttpPostWebServiceTask.onPostExecute(HttpPostWebServiceTask.java:1)<br/>
07-22 11:13:50.798: W/System.err(26524): at android.os.AsyncTask.finish(AsyncTask.java:631)<br/>
07-22 11:13:50.798: W/System.err(26524): at android.os.AsyncTask.access$600(AsyncTask.java:177)<br/>
07-22 11:13:50.803: W/System.err(26524): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)<br/>
07-22 11:13:50.803: W/System.err(26524): at android.os.Handler.dispatchMessage(Handler.java:99)<br/>
07-22 11:13:50.803: W/System.err(26524): at android.os.Looper.loop(Looper.java:137)<br/>
07-22 11:13:50.803: W/System.err(26524): at android.app.ActivityThread.main(ActivityThread.java:4947)<br/>
07-22 11:13:50.803: W/System.err(26524): at java.lang.reflect.Method.invokeNative(Native Method)<br/>
07-22 11:13:50.803: W/System.err(26524): at java.lang.reflect.Method.invoke(Method.java:511)<br/>
07-22 11:13:50.803: W/System.err(26524): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)<br/>
07-22 11:13:50.808: W/System.err(26524): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)<br/>
07-22 11:13:50.808: W/System.err(26524): at dalvik.system.NativeStart.main(Native Method)<br/>
结束编辑
这是我应该走的路吗:http://www.vogella.com/articles/AndroidNetworking/article.html
那么如何使用这种方法发布数据实体呢?
最佳答案
您可以尝试通过手机的网络浏览器连接到您的服务器,看看问题是否出在您的应用程序中,或者问题是否是解决/连接到您的服务器地址的 3G 问题。
我的猜测是您将无法通过网络浏览器进行连接。
您的网络服务托管在哪里?它应该可以从外部网络访问吗?如果服务器在同一网络中,您可以通过 wifi 连接到您的服务器。
关于android - AsyncTask HttpPost 在 3G 上执行失败,但在 Wifi 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473617/
我不明白为什么需要使用 [HttpPost("[action]")] 而不是 [HttpPost]? 如果使用[HttpPost("[action]")],那么来自角度客户端的请求会触发 Contro
我不明白为什么需要使用 [HttpPost("[action]")] 而不是 [HttpPost]? 如果使用[HttpPost("[action]")],那么来自角度客户端的请求会触发 Contro
所以我们有[HttpPost],这是一个可选属性。我知道这会限制调用,因此只能通过 HTTP POST 请求进行调用。我的问题是我为什么要这样做? 最佳答案 想象一下以下情况: [HttpGet] p
在 Scott Hanselman 的书中(第 1 章),他为我们提供了两个选项来实现 Create 操作方法的 [HttpPost]。 第一个依赖于 TryUpdateModel 根据传入的表单字段
我正在从 Android 应用程序向服务器发送 JSON 数据,我在人们添加的示例中看到: httpPost.setHeader("Content-type", "application/json")
- - - 更新 能够通过使用 UsernamePasswordCredentials 类来修复它 代码如下所示 val 客户端 = 新的 DefaultHttpClient client.getCr
这个问题让我很恼火。我正在重复使用适用于其他项目/类但不适用于我当前项目的相同代码。我所做的只是更改变量(POST 值和 EditText 名称)。但没有成功。 import java.util.Ar
这是我的代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
我正在为黑莓开发应用程序,我需要向我的服务器发送一个 Http 发布请求。我正在使用模拟器来测试我的应用程序,我发现这段代码是为了发送请求: http://vasudevkamath.techfiz.
我希望能够使用参数查看完整的 HttpClient/HttpPost URI。我不确定如何将其输出到我的控制台。 HttpClient httpclient = HttpClients.createD
我有一个带有 httpPost 属性的 ActionResult。如果我没有记错的话,当用户从 DateTimePicker 中选择日期时,我需要此属性。就我而言,我有 2 个日期时间选择器,类型为
嗨:)我遇到了一个简单的问题,但非常烦人。我正在尝试使用 HttpPost 类发送 http post 请求 这是返回InputStream的方法的一部分: HttpClient
我正在尝试通过 android studio 中的 java 将发布请求发送到我的 PHP 页面 首先我尝试了 httppost,但按下该键后应用程序崩溃了 然后我读到我必须使用新线程,我这样做了,但
我正在尝试将我的应用程序设置为在 HttpPost 上 3 秒后抛出超时异常。我正在从 ASyncTask 执行此请求。出于某种原因,即使我给它一个不存在的域,它也会挂起大约一两分钟,然后抛出最后一个
我正在尝试从 Android 应用程序中向我的 Google App Engine 应用程序发送 POST 请求,以便将文件上传到 blobstore 并将一些元数据上传到数据存储区。我构建了一个可以
在我的 CountryActivity.java 中,我有一个 HttpRequest 来检索维基百科的 json 信息。这是我使用 AsyncTask 的代码: private class D
我的 MainAcitivity 中有以下代码,用于使用方法 jsnrqstr.sendRequest(username, password, URL); 获取的用户名和密码登录到应用程序/p> lo
我有一个网页用 1 (true) 或 0 (false) 响应日志记录请求。当我尝试用另一个网页调用请愿书时,结果是正确的,它可以是 0 或 1。但是当我用 Android 应用程序调用它时,结果总是
在我的应用程序中,我必须从 4 个不同的 url 获取数据,然后在获取数据完成后,我必须按特定顺序显示项目。我正在使用 HttoPost 发送发布请求。我在不同的线程中分别发送 4 个请求。当线程获取
我尝试了所有可能的方法,但仍然出现以下错误 -1.无法解析符号ClientProtocolException2.无法解析符号HttpPost3.无法解析符号DefaultHttpClient JSON
我是一名优秀的程序员,十分优秀!