我正在尝试执行JSONObject请求:
final String URL = "https://some/url";
// Post params to be sent to the server
HashMap<String, String> params = new HashMap<String, String>();
params.put("param1", param1);
?params.put("param2", param2);
?params.put("param3", param3);?
params.put("param4", param4);
JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", "läuft");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
});
// add the request object to …Run Code Online (Sandbox Code Playgroud) 我试图在我的项目中使用volley来处理我的所有HTTP请求,因为据我所知它是最有效的.所以我开始通过AndroidHive教程学习排球.
我的第一个GET请求是成功的.然后我转到POST请求,但我失败了.我在Stack Overflow上看到很多人在将截击请求与PHP结合起来时遇到了问题.我相信我们无法使用正常方式访问它,$_POST[""]因为齐射将JSON对象发送到我们指定的URL.
我尝试了许多解决方案,但没有成功.我想应该有一个简单而标准的方法来使用PHP的凌空.所以我想知道在我的PHP代码中接收volley发送的json对象需要做什么.
还有我如何检查凌空是否真的发送JSON对象?
我的凌空代码发送简单的帖子请求:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
pDialog.hide();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("name", "Droider");
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
Run Code Online (Sandbox Code Playgroud)
我的PHP代码接收json对象:(我很确定这是错误的方式,我在PHP中不是那么好)
<?php
$jsonReceiveData …Run Code Online (Sandbox Code Playgroud) 目前我正在片段中的停止方法上使用mRequestQueue.cancelAll(getActivity()),但显然当我将手机从横向移动到肖像时,它仍然返回请求中的数据但导致崩溃,因为持有者为数据剂量已经存在.任何正确的代码示例代码?
问题陈述:
我试图访问一个REST API,它将使用Volley返回各种HTTP状态代码(400,403,200等)的JSON对象.
对于200以外的任何HTTP状态,似乎"意外响应代码400"是一个问题.有没有人有办法绕过这个'错误'?
码:
protected void getLogin() {
final String mURL = "https://somesite.com/api/login";
EditText username = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.password);
// Post params to be sent to the server
HashMap<String, String> params = new HashMap<String, String>();
params.put("username", username.getText().toString());
params.put("password", password.getText().toString());
JsonObjectRequest req = new JsonObjectRequest(mURL, new JSONObject(
params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject obj = response
.getJSONObject("some_json_obj");
Log.w("myApp",
"status code..." + obj.getString("name"));
// VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException …Run Code Online (Sandbox Code Playgroud) 正如我们所知,Apache HTTP Client已在API 23中删除
但是,Volley库目前仍然使用Apache的库如
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.cookie.DateUtils;
Run Code Online (Sandbox Code Playgroud)
我测试了2个项目:一个用于compileSdkVersion 22,另一个用于compileSdkVersion 23获得2个截图:
compileSdkVersion 22
compileSdkVersion 23
我有两个问题:
Apache在运行时使用该库,他们是在API22或更低版本中找到的?Apache图书馆吗?如果没有,当Apache我的图书馆完全删除并且不受支持时,我现在的项目是否仍会继续使用?也许我的英语不太清楚,但希望你能理解我的问题.
任何解释将不胜感激.
更新:
从@ random的评论中,我使用谷歌的官方Volley库创建了一个新的API23项目(我的意思git clone https://android.googlesource.com/platform/frameworks/volley是谷歌建议的这里),而不是compile 'com.mcxiaoke.volley:library:1.0.17'在build.gradle文件中使用.是的,在构建项目时因缺少Apache库而出错.必须按文档添加useLibrary 'org.apache.http.legacy'到build.gradle文件中.
第二次更新:
我刚刚定制了谷歌的排球(作为我项目中的一个模块),删除了Apache库.请转到我的GitHub示例项目供您参考.但请注意,它尚未针对所有情况进行全面测试,并且我仅测试了02个简单案例:GET并且POST我的Web服务请求是ASP.NET Web …
apache android httpresponse android-volley android-api-levels
我有点喜欢Volley框架,但我仍然对它有些怀疑.
例如,Volley如何与Loader模式对齐?由于它的请求是以异步方式处理的,因此在后台调用它并没有多大意义.另一方面,如果我们忽略Loader模式,我们将取消加载并重新加载必要的资源,这有点浪费.
Volley框架如何与Android中的Loaders一起使用?
我试图按照此答案中的说明操作,但是android update project -p .在克隆volley文件夹中运行会抛出此错误:
Error: . is not a valid project (AndroidManifest.xml not found).
Run Code Online (Sandbox Code Playgroud) 我正在使用AndroidHive寄存器登录,它在这个登录寄存器的示例项目中工作正常.
但经过多次尝试使用CardViews和其他小部件尝试后,此错误出现在LogCat:
java.lang.NullPointerException: Attempt to invoke virtual method 'void client.myproject.app.AppController.addToRequestQueue(com.android.volley.Request, java.lang.String)' on a null object reference
at client.myproject.RegisterActivity.registerUser(RegisterActivity.java:185)
at client.myproject.RegisterActivity.access$300(RegisterActivity.java:35)
at client.myproject.RegisterActivity$1.onClick(RegisterActivity.java:81)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Run Code Online (Sandbox Code Playgroud)
虽然这些代码在单个应用程序中正常工作(只需注册登录).
我正在使用Volley库.
我的问题应该听起来像傻瓜,但我只是从Asynktask跳到RxJava.所以:
可以使用RxJava Observable和Volley Requests吗?这意味着,使用未来的请求.
我问这个问题,因为像改造这样的另一个httpClient 使用RxJava非常好,但是个人喜欢Volley,所以它可能吗?
编辑
基于第一个答案,我知道这是可能的.
你能分享一些展示如何做到这一点的样本吗?
我在SO和其他内容中也经历了很多帖子.但我无法获得任何最新的官方或其他帖子,其中不包含任何弃用的代码,用于使用volley上传多个图像.我开始了解Apache HTTP Client删除和相关的新的Android M和首选使用下面的代替.
android {
useLibrary 'org.apache.http.legacy'
}
Run Code Online (Sandbox Code Playgroud)
那么,任何人都可以通过新的更新已弃用的减少排球类来帮助我进行多个图像上传吗?