来自iOS开发人员学习Android的两部分问题,研究Android项目,该项目将发出从JSON到图像到音频和视频的流媒体下载的各种请求:
在iOS上,我广泛使用了AFNetworking项目.是否有适用于Android的等效库?
我已经阅读了OkHTTP和Square的改造,以及Volley,但还没有与他们一起开发的经验.我希望有人可以提供一些最佳使用案例的具体例子.从我所看到的,看起来OkHTTP是三者中最强大的,并且可以处理这个项目的要求(如上所述).
我正在使用android Volley提出请求.所以我使用这段代码.我不明白一件事.我检查我的服务器,params始终为null.我认为getParams()不起作用.我该怎么做才能解决这个问题.
RequestQueue queue = MyVolley.getRequestQueue();
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,SPHERE_URL,null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
System.out.println(response);
hideProgressDialog();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
hideProgressDialog();
}
}) {
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("id","1");
params.put("name", "myname");
return params;
};
};
queue.add(jsObjRequest);
Run Code Online (Sandbox Code Playgroud) 我正在考虑在我的下一个项目中实施Android Volley库(关于Volley的Google IO演示文稿).
但是,我没有为该库找到任何严肃的API.
如何JSON使用Volley 上传文件,执行POST/GET请求以及添加Gson解析器作为解析器?
请问,Volley会自动将我的GET参数添加到URL吗?对我来说,它不是这样工作,也是在查看源代码时,我无法找到任何getParams方法的调用.那么我应该自己构建URL吗?这根本不是问题,我只是认为当有像getParams这样的方法时,它可以为我做到这一点:)
更新:以下是我的代码..
public class BundleRequest extends com.android.volley.Request<Bundle>{
private String token;
private OnAuthTokenValidatorResponseListener mListener;
private final Map<String, String> mParams = new HashMap<String, String>();;
public BundleRequest(int method, String url, Response.ErrorListener listener) {
super(method, url, listener);
}
public BundleRequest(int method, String url,OnAuthTokenValidatorResponseListener providedListener, Response.ErrorListener listener, String token) {
super(method, url, listener);
this.token = token;
mListener = providedListener;
mParams.put(AuthenticatorConfig.TOKEN_VALIDATION_PARAMNAME, token);
}
@Override
public Map<String, String> getParams() throws AuthFailureError {
return mParams;
}
@Override
protected Response<Bundle> parseNetworkResponse(NetworkResponse httpResponse) {
switch (httpResponse.statusCode) {
case AuthTokenValidator.TOKEN_VALID_RESPONSE_CODE:
//token …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中实现了recyclerview,现在我需要从服务器获取数据,我才知道volley是获取数据的最佳方式.我在网上搜索但我无法找到相同的教程.
这是我在我的代码中初始化recyclerview的方法.(具有硬编码数据集)
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
mAdapter = new CardAdapter();
mRecyclerView.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)
这是适配器代码.
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
ArrayList<BusRouteNameDetails> mItems;
public int TAG=0;
public CardAdapter() {
super();
mItems = new ArrayList<>();
BusRouteNameDetails routename = new BusRouteNameDetails();
routename.setName("xyz");
routename.setNumber("X4");
mItems.add(routename);
routename = new BusRouteNameDetails();
routename.setName("xyz");
routename.setNumber("X4");
mItems.add(routename);
routename = new BusRouteNameDetails();
routename.setName("xyz");
routename.setNumber("X4");
mItems.add(routename);
routename = new BusRouteNameDetails();
routename.setName("xyz");
routename.setNumber("X4");
mItems.add(routename);
routename = new BusRouteNameDetails();
routename.setName("xyz");
routename.setNumber("X4");
mItems.add(routename);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, …Run Code Online (Sandbox Code Playgroud) 我有以下代码(Volley Library By Google)向我的php服务器发送POST请求并获取信息.我没有检查isset($_POST['id'])PHP 尝试代码,代码工作正常.在我开始检查时购买,php会跳过if语句并转到else意味着代码没有params正确发送.我怎样才能解决这个问题?
RequestQueue queue = Volley.newRequestQueue(Chat.this);
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
CHAT_URL_FEED, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("THISSSSSSSS", response.toString());
if (response != null) {
parseChatJsonFeed(response);
}
}
}, new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error){
VolleyLog.d("Here", "Error: " + error.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("id", id);
return params;
}
};
queue.add(jsonObjReq);
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下代码:
RequestQueue queue = Volley.newRequestQueue(Chat.this); …Run Code Online (Sandbox Code Playgroud) 我知道如何使用Volley GET方法进行登录,但如果需要指定特定的"id"怎么办?我使用intent.putExtra将列表项的"id"从远程数据库传递到另一个活动.在下一个活动中,我将如何利用Volleys的GET方法使用通过"id"传递的另一个表来解析和显示数据?
在浏览器中,我可以使用以下内容来获取具有指定url和参数的响应:
http://localhost/demoapp/fetch.php?pid=2
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将该URL传递给Volley请求并在列表视图中显示响应.像这样的东西:
"http://localhost/demoapp/fetch.php?pid=" + pid
Run Code Online (Sandbox Code Playgroud)
其中"pid"将是相应id的传递字符串.
编辑:PHP代码
<?php
include_once("config.php");
$query=mysqli_query($con,"SELECT * FROM comments WHERE pid=".$_GET['pid']);
$array;
while($result=mysqli_fetch_assoc($query)){
$array[]=$result;
}
echo json_encode($array);
?>
Run Code Online (Sandbox Code Playgroud)
编辑2:JAVA代码 主要活动
JsonArrayRequest request = new JsonArrayRequest(url+url_file,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString()); try {
for(int i=0;i<response.length();i++){
String pid=response.getJSONObject(i).getString("pid");
String name=response.getJSONObject(i).getString("product_name");
String img;
String thumb = response.getJSONObject(i).getString("product_thumb");
String detail = response.getJSONObject(i).getString("product_detail");
String rating = response.getJSONObject(i).getString("product_rating");
img = response.getJSONObject(i).getString("product_pic");
rowdata.add(new ProductRowData(pid,name,img,thumb,detail,rating));
}
} catch (JSONException e) {
// TODO Auto-generated catch …Run Code Online (Sandbox Code Playgroud) 如此处所示,/sf/answers/1164760691/,在Java中,您可以在公开时覆盖声明的类的功能
但是我想知道如何在Kotlin中完成相同的代码,我已经尝试了很多,但没有找到关于这个主题的任何地方.我可以用Java来做这个,但我的其余代码都在Kotlin中,而且我不能忍受这种怀疑; Kotlin对我来说感觉像是一个很好的工具,想要学习它.
美好的一天!
我的应用程序使用简单的http客户端 - 服务器通信,在客户端与Volley库建立.首先,我启动一个授权请求:
public class AuthenticationRequest extends StringRequest {
private static final String TAG = AuthenticationRequest.class.getSimpleName();
private String login;
private String password;
public AuthenticationRequest(int method,
String url,
Response.Listener<String> listener,
Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}
public void setLogin(String login) {
this.login = login;
}
public void setPassword(String password) {
this.password = password;
}
@Override
protected Map<String, String> getParams() {
HashMap<String, String> parameters = new HashMap<>();
parameters.put("login", login);
parameters.put("password", password);
return parameters;
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) …Run Code Online (Sandbox Code Playgroud) android androidhttpclient android-volley android-cookiemanager