简体   繁体   English

提取JSON数据时出现Android Volley错误

[英]Android Volley error while fetch JSON data

I have a JSON file in my localhost and I'm trying to fetch all it's data on my android application using Volley Requests. 我的本地主机中有一个JSON文件,我正在尝试使用Volley Requests在我的android应用程序中获取所有数据。 Now, while I try to fetch my Parsed data (using JSON) I got some unknown errors! 现在,当我尝试使用JSON提取解析的数据时,出现了一些未知错误! I'm using my emulator to test my application. 我正在使用模拟器来测试我的应用程序。

here is my JSON File: 这是我的JSON文件:

{"dolaaye_posts":[{"id":"1","post_subject":"salam","post_desc":"salam"},{"id":"2","post_subject":"????","post_desc":"????"}],"success":1}

here is my MainActivity.java: 这是我的MainActivity.java:

    package ir.dolaaye;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import com.android.volley.AuthFailureError;
import com.android.volley.Cache;
import com.android.volley.NetworkError;
import com.android.volley.NoConnectionError;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.ServerError;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.UnsupportedEncodingException;

public class MainActivity extends AppCompatActivity {

    /**
     * The {@link android.support.v4.view.PagerAdapter} that will provide
     * fragments for each of the sections. We use a
     * {@link FragmentPagerAdapter} derivative, which will keep every
     * loaded fragment in memory. If this becomes too memory intensive, it
     * may be best to switch to a
     * {@link android.support.v4.app.FragmentStatePagerAdapter}.
     */
    private SectionsPagerAdapter mSectionsPagerAdapter;

    /**
     * The {@link ViewPager} that will host the section contents.
     */
    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


////////start of Volley Request///////////////



        String tag_json_array = "tag_json_array";
/**
 * @url = Url for get json Object
 */
        String url = "http://10.0.2.2:1378/scripts/dolaaye/posts.json";
        /**
         * Show Progress Dialog
         *              Before Get Data From Server
         *              Or
         *              Get Error From Server
         */
        final ProgressDialog pDialog = new ProgressDialog(this);
        pDialog.setMessage("در حال جمع آوری اطلاعات...");
        pDialog.show();

        /**
         * Create Request For Get Json Array From Server
         *
         *            Exist To Method In The Request :
         *                 1 : onResponse => That Get Response For Server
         *                                   If Data Exist In The Server
         *
         *                 2 : onErrorResponse => That Show Error
         *                              If Data Do Not Exist In The Server
         */
        JsonArrayRequest jsonArrReq = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray jsonArray) {
                        Log.e("LOG", jsonArray.toString());
                        for (int i = 0 ; i < jsonArray.length() ; i++)
                        {
                            try {
                                JSONObject jsonObject = jsonArray.getJSONObject(i);
                                Log.i("LOG", "object : " + jsonObject.getString("id"));
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        pDialog.hide();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        VolleyLog.e("VolleyError", volleyError.getMessage());

                        if (volleyError instanceof TimeoutError || volleyError instanceof NoConnectionError) {
                            VolleyLog.e("VolleyError", volleyError.getMessage());
                        } else if (volleyError instanceof AuthFailureError) {
                            //TODO
                        } else if (volleyError instanceof ServerError) {
                            //TODO
                        } else if (volleyError instanceof NetworkError) {
                            //TODO
                        } else if (volleyError instanceof ParseError) {
                            //TODO
                        }
                        pDialog.hide();
                    }
                });

        Cache cache = G.getInstance().getRequestQueue().getCache();
        Cache.Entry entry = cache.get(url);
        if (entry != null){
            try {
                String data = new String(entry.data, "UTF-8");
                Log.i("LOG",data);
                pDialog.hide();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        } else {
        }
        G.getInstance().addToRequestQueue(jsonArrReq,tag_json_array);


       ////end of Volley Request //////////////////////////////////

}
}

I have set INTERNET-PERMISSION and ACCESS_NETWORK_STATE to my manifest. 我已经将INTERNET-PERMISSION和ACCESS_NETWORK_STATE设置为清单。 here is my logcat: 这是我的日志:

08-23 13:33:49.767 22388-22388/ir.dolaaye E/Volley: [1] 2.onErrorResponse: VolleyError

I don't know why! 我不知道为什么!

you are getting a jsonObject in responce but you are handling JsonArray in your code by using JsonArrayRequest , so you have to JsonObject Request as following 您正在响应中获取jsonObject,但您正在使用JsonArrayRequest处理代码中的JsonArray,因此您必须按以下方式执行JsonObject Request

JsonObjectRequest jsObjRequest = new JsonObjectRequest (Request.Method.GET, url, null, new Response.Listener() { JsonObjectRequest jsObjRequest =新的JsonObjectRequest(Request.Method.GET,url,null,新的Response.Listener(){

@Override
public void onResponse(JSONObject response) {
    mTxtDisplay.setText("Response: " + response.toString());
}

}, new Response.ErrorListener() { },新的Response.ErrorListener(){

@Override
public void onErrorResponse(VolleyError error) {
    // TODO Auto-generated method stub

}

}); });

for more info follow the android developer link 有关更多信息,请遵循android开发人员链接

https://developer.android.com/training/volley/request.html https://developer.android.com/training/volley/request.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM