Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Android 我的RecyclerView无法查看来自parse json ArrayIndexOutOfBoundsException的数据_Android_Android Asynctask - Fatal编程技术网

Android 我的RecyclerView无法查看来自parse json ArrayIndexOutOfBoundsException的数据

Android 我的RecyclerView无法查看来自parse json ArrayIndexOutOfBoundsException的数据,android,android-asynctask,Android,Android Asynctask,我想创建一个从服务器获取json响应并设置为我的Recyclerview的应用程序,但它包含错误 这是我的代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frag

我想创建一个从服务器获取json响应并设置为我的Recyclerview的应用程序,但它包含错误

这是我的代码:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_utama, container, false);

       recyclerView = (RecyclerView) view.findViewById(R.id.list_utra);
        dataku = new ArrayList<>();
        gridLayoutManager = new GridLayoutManager(getActivity(), 4);
        adapter = new RecyclerAdapter(getActivity(), dataku);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(gridLayoutManager);
        Ambildatadariserver(0);
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
            public void onScrolled(RecyclerView recyclerView, int dx, int dy){
                if(gridLayoutManager.findLastCompletelyVisibleItemPosition() == dataku.size()-1){
                    Ambildatadariserver(dataku.get(dataku.size()-1).getId());
                }
            }
        });

        return view;
    }
    private void Ambildatadariserver(int id){
        AsyncTask<Integer, String, Void> task = new AsyncTask<Integer, String, Void>(){
            @Override
            protected Void doInBackground(Integer... integers){
                sharedPreferences = getActivity().getSharedPreferences("login.conf", Context.MODE_PRIVATE);
                editor = sharedPreferences.edit();
                String username = sharedPreferences.getString("username", "");
                String password = sharedPreferences.getString("password", "");
                httpClient = new OkHttpClient();
                RequestBody formBody = new FormBody.Builder().add("username_krm", username).add("password_krm", password).build();
                Request request = new Request.Builder().url(alamat_json + integers[0]).post(formBody).build();
                try {
                    Response response = httpClient.newCall(request).execute();
                    JSONArray jsonArray = new JSONArray(response.body().string());
                    for(int i=0;i<jsonArray.length();i++){
                        JSONObject object = jsonArray.getJSONObject(i);
                        DataJson data = new DataJson(object.getInt("id"), object.getString("username"), object.getString("email"), object.getString("tanggal_lahir"));
                        dataku.add(data);
                    }
                }
                catch (IOException e){
                    e.printStackTrace();
                }
                catch (JSONException e){
                    System.out.println("Akhir Json File");
                }
                return null;
            }
            @Override
            protected void onPostExecute(Void Avoid){
                adapter.notifyDataSetChanged();
            }
        };
        task.execute();
    }
怎么了,有什么想法吗?我现在是新手。
感谢您的帮助

我发现有两个可能的源可能会抛出ArrayIndexOutOfBoundsException。 首先适配器,我看到dataku是一个ArrayList,它没有元素。适配器可以处理空列表吗?
Second可以查找LastCompletelyVisibleItemPosition()返回-1,因为如果列表的大小为0,则尝试访问dataku.get(dataku.size()-1)处的位置-1。

尝试记录
jsonArray
以查看它的外观
  01-22 20:47:42.830 10352-10366/? E/AndroidRuntime:  FATAL EXCEPTION: AsyncTask #1
          Process: ptguwatirtasejahtera.utraposmobile, PID: 10352
                                                       java.lang.RuntimeException: An error occured while executing doInBackground()
                                                           at android.os.AsyncTask$3.done(AsyncTask.java:300)
                                                           at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                                                           at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                           at java.lang.Thread.run(Thread.java:841)
                                                        Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
                                                           at ptguwatirtasejahtera.utraposmobile.FragmentUtama$2.doInBackground(FragmentUtama.java:156)
                                                           at ptguwatirtasejahtera.utraposmobile.FragmentUtama$2.doInBackground(FragmentUtama.java:147)
                                                           at android.os.AsyncTask$2.call(AsyncTask.java:288)
                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                           at java.lang.Thread.run(Thread.java:841)