Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获得Json响应_Java_Android - Fatal编程技术网

Java 如何获得Json响应

Java 如何获得Json响应,java,android,Java,Android,我对安卓非常陌生。。我想从RESTfulWebService获得响应。Webservice运行良好。但是,如何获得安卓系统的响应。。如果我运行该应用程序,请等待仅出现的进度。。。请任何人帮忙 这是我的密码 public void invokeWS(RequestParams-params){ //显示进度对话框 prgDialog.show(); //使用AsyncHttpClient对象进行RESTful Web服务调用 AsyncHttpClient=新的AsyncHttpClient()

我对安卓非常陌生。。我想从RESTfulWebService获得响应。Webservice运行良好。但是,如何获得安卓系统的响应。。如果我运行该应用程序,请等待仅出现的进度。。。请任何人帮忙

这是我的密码

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"..../>