我正在使用android-async-http而且非常喜欢它.我遇到了POST数据的问题.我必须以下列格式将数据发布到API: -
<request>
<notes>Test api support</notes>
<hours>3</hours>
<project_id type="integer">3</project_id>
<task_id type="integer">14</task_id>
<spent_at type="date">Tue, 17 Oct 2006</spent_at>
</request>
Run Code Online (Sandbox Code Playgroud)
根据文档,我尝试使用它RequestParams
,但它失败了.这是其他任何方式吗?我也可以发布等效的JSON.有任何想法吗?
当使用loopj AsyncHttpClient库时,我在发出请求时不断获取java.net.SocketTimeoutExceptions(见下文).
我可以设置一些超时值吗?
注意:我发布这个是希望为其他人提供一些帮助.我(愚蠢地)努力寻找解决方案一段时间.
堆栈跟踪:
java.net.SocketTimeoutException
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:76)
at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:95)
at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:57)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud) Android loopj Async Http lib的新更新已经发布,并且它们发生了很大变化.现在你需要手动设置,Looper.prepare()
否则它默认使用同步模式而不是异步.我没有得到我需要设置的地方.
logcat的
07-09 08:16:18.775: W/AsyncHttpResponseHandler(6606): Current thread has not called Looper.prepare(). Forcing synchronous mode.
Run Code Online (Sandbox Code Playgroud)
在那个消息之后它完全崩溃了
07-09 08:16:18.835: E/AndroidRuntime(6606): FATAL EXCEPTION: AsyncTask #1
07-09 08:16:18.835: E/AndroidRuntime(6606): java.lang.RuntimeException: An error occured while executing doInBackground()
07-09 08:16:18.835: E/AndroidRuntime(6606): at android.os.AsyncTask$3.done(AsyncTask.java:278)
07-09 08:16:18.835: E/AndroidRuntime(6606): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-09 08:16:18.835: E/AndroidRuntime(6606): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-09 08:16:18.835: E/AndroidRuntime(6606): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-09 08:16:18.835: E/AndroidRuntime(6606): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-09 08:16:18.835: E/AndroidRuntime(6606): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
07-09 08:16:18.835: E/AndroidRuntime(6606): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-09 08:16:18.835: E/AndroidRuntime(6606): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-09 08:16:18.835: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用loopj来进行异步 HTTP
请求.工作得很好,除非我尝试使用自签名证书访问https站点.我明白了
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate.
Run Code Online (Sandbox Code Playgroud)
我想默认的ssl选项可以覆盖使用setSSLSocketFactory(SSLSocketFactory sslSocketFactory)
方法,但我不知道该怎么做,或者它可能根本不是正确的方法.
请建议我该如何解决这个问题?
我正在使用Loopj将文件上传到我的WordPress站点和WP REST API v1和/或v2(相同的结果).
身份验证很棒,标题很棒,文件"上传"但是当我在我的WordPress后端检查它时...图像或文件被破坏了.
Android部分是这样的:
File myFile = new File(finalpath);
String name = Utils.getLastBitFromUrl(finalpath);
String extension = Utils.getFileExtention(finalpath);
client.setBasicAuth("myusername", "mypassword", new AuthScope("mywebsite.com", 80, AuthScope.ANY_REALM));
client.addHeader("Content-Disposition", "filename=" + name);
client.addHeader("Content-Type", "image/" + extension);
try {
params.put("data", myFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// or: http://mywebsite.com/wp-json/wp/v2/media for v2
client.post("http://mywebsite.com/wp-json/media", params, new AsyncHttpResponseHandler() {
int count = 0;
@Override
public void onStart() {
prgDialog = new ProgressDialog(MainActivity.this);
prgDialog.setMessage("Uploading Image...");
prgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
prgDialog.setMax(100);
prgDialog.show();
}
@Override
public void onProgress(long bytesWritten, long totalSize) …
Run Code Online (Sandbox Code Playgroud) 我正在使用来自loopj的伟大的异步http库,但我遇到了一个小麻烦.
如果用户没有互联网连接或丢失连接,该应用程序将不会返回任何内容.这部分是预期的,但它也不会触发onFailure方法.
此外,我有一个互联网连接时使用的代码确实有效,所以在服务器端没有问题.
这是一些被剥离到最低限度的代码.它也不起作用(我也测试了这个)
String url = getString(R.string.baseurl) + "/appconnect.php";
client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
client.get(url, null, new JsonHttpResponseHandler()
{
@Override
public void onSuccess(JSONArray response)
{
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Throwable e, JSONArray errorResponse)
{
Toast.makeText(getApplicationContext(), "Failure", Toast.LENGTH_SHORT).show();
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢,阿什利
当我run
在Android设备上尝试我的Android应用程序时,gradle控制台报告以下错误:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/loopj/android/http/AsyncHttpClient$1.class
Run Code Online (Sandbox Code Playgroud)
当我搜索"AsyncHttpClient"类时,我发现它确实存在于两个不同的位置:
/Users/Afflatus/.gradle/caches/modules-2/files-2.1/com.loopj.android/android-async-http/1.4.9/5d171c3cd5343e5997f974561abed21442273fd1/android-async-http-1.4.9-sources.jar!/com/loopj/android/http/AsyncHttpClient.java
/Users/Afflatus/.ideaLibSources/android-async-http-1.4.9-sources.jar!/com/loopj/android/http/AsyncHttpClient.java
Run Code Online (Sandbox Code Playgroud)
第一条路径似乎表明它是一个"缓存"文件......所以我试过了invalidating & restarting my cache
,但是在gradle重建之后这两个文件仍然存在,我尝试run
了应用程序.我已经在备用帖子中看到它可以通过删除其中一个文件来解决...所以我去了缓存位置并删除了"1.4.9"文件夹中找到的所有文件...在重新打开Android Studio后不幸,一个新的缓存文件被创建,我得到相同的错误.
其他帖子(这里,这里,这里和这里)建议如果我将"./gradlew clean"添加到根目录,它将仅为运行重建gradle(据我所知).所以我也尝试过这样做:
这使我的应用程序的文件夹看起来像这样:
但不幸的是,这并没有帮助我仍然得到同样的错误.我究竟做错了什么?我该怎么办?
我正在尝试使用loopj的异步http库向服务器发送POST .以下代码非常标准,但我无法使其工作.
我调试了很多,并检查了以下内容:
似乎HttpResponse response = client.execute(request, context);
在AsyncHttpRequest.makeRequest()
请求中调用时不包含任何参数:
编辑:看了一下代码后,似乎POST参数可能包含在实体或标题组中.
但真正的问题是我没有得到任何回调(见下面的代码).在if
后声明client.execute()
通话不会被调用(断点不会被触发).
RequestParams params = new RequestParams();
params.put("loginid", "user");
params.put("password", "pass");
params.put("deviceid", "deviceid");
AsyncHttpClient client = new AsyncHttpClient();
client.post(MDSettings.BASE_URL + "/user/login", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
Log.d(MDSettings.TAG, "MDConnectionManager - login - response: " + response);
singleton.connectionSuccessful(response, returnIndex);
}
@Override
public void onFailure(Throwable error, String content) {
Log.d(MDSettings.TAG, "MDConnectionManager - login - content: " + …
Run Code Online (Sandbox Code Playgroud) 在我的一个项目中,我正在使用loopj asynchttpclient
与我的网站进行通信.沟通部分运作良好,也得到了回应
我的活动看起来像
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
WebRequest test=new WebRequest();
test.callService();
}
Run Code Online (Sandbox Code Playgroud)
WebRequest类为
public class WebRequest extends Activity {
public void callService(){
AsyncHttpClient client = new AsyncHttpClient();
client.post("http://domain.com/dp/index.php", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
Log.v("P",response);
}
@Override
public void onFailure(Throwable e, String response) {
Log.v("PS",e.toString());
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我很困惑如何将响应返回到主活动,以便我可以从该响应创建列表视图.
我是新来的请帮助我提前谢谢
我正在尝试从图库中选择图像然后将此图像转换为文件并通过HttpPost发送它,但我总是得到它FileNotFoundException
.我的代码:
选择照片
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
// currImageURI is the global variable I’m using to hold the content:
currImageURI = data.getData();
//Save the currImageUri (URI type) to global variable.
photosHolder.getInstance().setOneIm(currImageURI);
}
}
}
Run Code Online (Sandbox Code Playgroud)
转换照片
// First Try
File myFile = new File((photosHolder.getInstance().getOneIm()).toString());
params.put("visit_report[photos_attributes][0][file]",myFile); **The exception Raised here
// second try
File myFile2 = new File((photosHolder.getInstance().getOneIm()).getPath());
params.put("visit_report[photos_attributes][1][file]",myFile2); ** Also here
Run Code Online (Sandbox Code Playgroud)
在调试时,这些是myFiles Value:
mFile : …
Run Code Online (Sandbox Code Playgroud) android ×10
loopj ×10
asynchronous ×3
java ×3
post ×2
build.gradle ×1
file ×1
gradle ×1
http ×1
httpclient ×1
httprequest ×1
rest ×1
uri ×1
web-services ×1
wordpress ×1
wp-api ×1