Java 如何获得Json响应
我对安卓非常陌生。。我想从RESTfulWebService获得响应。Webservice运行良好。但是,如何获得安卓系统的响应。。如果我运行该应用程序,请等待仅出现的进度。。。请任何人帮忙 这是我的密码Java 如何获得Json响应,java,android,Java,Android,我对安卓非常陌生。。我想从RESTfulWebService获得响应。Webservice运行良好。但是,如何获得安卓系统的响应。。如果我运行该应用程序,请等待仅出现的进度。。。请任何人帮忙 这是我的密码 public void invokeWS(RequestParams-params){ //显示进度对话框 prgDialog.show(); //使用AsyncHttpClient对象进行RESTful Web服务调用 AsyncHttpClient=新的AsyncHttpClient()
public void invokeWS(RequestParams-params){
//显示进度对话框
prgDialog.show();
//使用AsyncHttpClient对象进行RESTful Web服务调用
AsyncHttpClient=新的AsyncHttpClient();
client.get(“http://192.168.2.2:9999/useraccount/login/dologin,参数,新的JsonHttpResponseHandler(){
//REST返回的响应具有Http响应代码“200”时
@凌驾
成功时公共无效(int statusCode,Header[]headers,字符串响应){
//隐藏进度对话框
prgDialog.hide();
试一试{
//JSON对象
JSONObject obj=新的JSONObject(响应);
//当JSON响应的状态布尔值为true时
if(obj.getBoolean(“状态”)){
Toast.makeText(getActivity().getApplicationContext(),“您已成功登录!”,Toast.LENGTH_LONG.show();
//导航到主屏幕
//导航家庭活动();
}
//否则显示错误消息
否则{
errorMsg.setText(obj.getString(“error_msg”);
Toast.makeText(getActivity().getApplicationContext(),obj.getString(“error_msg”),Toast.LENGTH_LONG.show();
}
}捕获(JSONException e){
//TODO自动生成的捕捉块
Toast.makeText(getActivity().getApplicationContext(),“发生错误[服务器的JSON响应可能无效]!”,Toast.LENGTH_LONG.show();
e、 printStackTrace();
}
}
//当REST返回的响应包含“200”以外的Http响应代码时
@凌驾
public void onFailure(int statusCode,头[]头,字符串内容,可丢弃错误){
//隐藏进度对话框
prgDialog.hide();
//当Http响应代码为“404”时
如果(状态代码==404){
Toast.makeText(getActivity().getApplicationContext(),“未找到请求的资源”,Toast.LENGTH\u LONG.show();
}
//当Http响应代码为“500”时
否则如果(状态代码==500){
Toast.makeText(getActivity().getApplicationContext(),“服务器端出了问题”,Toast.LENGTH_LONG.show();
}
//当Http响应代码不是404500时
否则{
Toast.makeText(getActivity().getApplicationContext(),“发生意外错误![最常见的错误:设备可能未连接到Internet或远程服务器未启动并运行]”,Toast.LENGTH_LONG).show();
}
}
});
}
首先,确保您对清单拥有权限:
<uses-permission android:name="android.permission.INTERNET" />
有关镜像库的详细信息,请单击
下面是示例实现:
public void SendRequest(View view){
progressDialog.setMessage("Please wait");
progressDialog.show();
String url ="YOUR_URL";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("Message", "Response is: " + response);
progressDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Message", "Error");
error.printStackTrace();
progressDialog.dismiss();
}
});
stringRequest.setTag("YOUR_TAG");
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
为了在需要更改要显示的片段时更容易处理,只需在暂停或停止时添加此项。祝你好运 我假设您正在使用LoopJ库,这很好,如果您使用,请继续使用它 您使用的是JsonHttpResponseHandler,而不是AsyncHttpResponseHandler。响应将以字节数组的形式返回,因此需要将其解析为json。我在这里创建了一个单独的函数,便于重用。例如:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://192.168.2.2:9999/useraccount/login/dologin", params, new AsyncHttpResponseHandler() { //here is where you should use AsyncHttpResponseHandler instead
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
Log.d("*** LOG login: " + this.getClass().getName(), "SUCCESS");
JSONObject responseParsed = parseResult(response);
//your code continue here, example hide the progress bar
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
Log.d("*** LOG error: " + this.getClass().getName(), e.toString());
}
});
下面是解析响应字节数组的示例代码。从上一个onSuccess()中调用该函数:
为了从服务器获取数据,请按照以下步骤操作 首先在build.gradle文件中添加此依赖项并同步它 编译'com.mcxiaoke.volley:library-aar:1.0.0' 现在创建一个名为Appcontroller的类,该类扩展应用程序,并添加该类并导入显示红线的api
public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
int socketTimeOut = 60000;
RetryPolicy policy = new DefaultRetryPolicy(socketTimeOut, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
req.setRetryPolicy(policy);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
public static String getDate() {
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
String formatedDate = dateFormat.format(date);
return formatedDate;
}
}
公共类AppController扩展应用程序{
公共静态最终字符串标记=AppController.class.getSimpleName();
私有请求队列mRequestQueue;
专用静态应用控制器;
@凌驾
public void onCreate(){
super.onCreate();
mInstance=这个;
}
公共静态同步AppController getInstance(){
回报率;
}
公共请求队列getRequestQueue(){
if(mRequestQueue==null){
mRequestQueue=Volley.newRequestQueue(getApplicationContext());
}
返回mrequest队列;
}
公共无效addToRequestQueue(请求请求,字符串标记){
请求setTag(TextUtils.isEmpty(tag)?tag:tag;
int socketTimeOut=60000;
RetryPolicy policy=新的DefaultRetryPolicy(socketTimeOut,DefaultRetryPolicy.DEFAULT\u MAX\u RETRIES,DefaultRetryPolicy.DEFAULT\u BACKOFF\u MULT);
请求设置策略(策略);
getRequestQueue().add(请求);
}
公共无效addToRequestQueue(请求请求){
要求设置标签(标签);
getRequestQueue().add(请求);
}
公共作废取消挂起请求(对象标记){
if(mRequestQueue!=null){
mRequestQueue.cancelAll(标记);
}
}
公共静态字符串getDate(){
DateFormat DateFormat=新的SimpleDateFormat(“dd-MM-yyyy”);
日期=新日期();
字符串formateDate=dateFormat.format(日期);
返回格式化日期;
}
}
现在将这两项添加到您的活动中
Response.Listener<String> jsonResponse;
Response.ErrorListener errorListener;
Response.Listener-jsonResponse;
Response.ErrorListener-ErrorListener;
然后像这样初始化oncreate中的那些
jsonResponse = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("Response", response);
//parseData(response); and store it
}
};
errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(getApplicationContext(), "Unable to fetch Data from server", Toast.LENGTH_SHORT).show();
finish();
}
};
if (ServerConfig.isNetworkOnline(SplashScreen.this)) {
StringRequest strReq = new StringRequest(Request.Method.POST, "your server link", serverResponse, errorListener) {
};
AppController.getInstance().getRequestQueue().add(strReq);
} else {
Toast.makeText(getApplicationContext(), "Please check your network connection", Toast.LENGTH_SHORT).show();
finish();
}
public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
int socketTimeOut = 60000;
RetryPolicy policy = new DefaultRetryPolicy(socketTimeOut, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
req.setRetryPolicy(policy);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
public static String getDate() {
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
String formatedDate = dateFormat.format(date);
return formatedDate;
}
}
Response.Listener<String> jsonResponse;
Response.ErrorListener errorListener;
jsonResponse = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("Response", response);
//parseData(response); and store it
}
};
errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(getApplicationContext(), "Unable to fetch Data from server", Toast.LENGTH_SHORT).show();
finish();
}
};
if (ServerConfig.isNetworkOnline(SplashScreen.this)) {
StringRequest strReq = new StringRequest(Request.Method.POST, "your server link", serverResponse, errorListener) {
};
AppController.getInstance().getRequestQueue().add(strReq);
} else {
Toast.makeText(getApplicationContext(), "Please check your network connection", Toast.LENGTH_SHORT).show();
finish();
}
<application
android:name=".AppController"..../>