尝试用JSON填充微调器并获得';java.lang.Object[]java.util.Collection.toArray()';关于空对象引用

尝试用JSON填充微调器并获得';java.lang.Object[]java.util.Collection.toArray()';关于空对象引用,java,android,json,nullpointerexception,android-spinner,Java,Android,Json,Nullpointerexception,Android Spinner,我是一个android新手,正在尝试使用JSON填充spinner,但我一直遇到空指针异常- java.lang.NullPointerException: Attempt to invoke interface method java.lang.Object[] java.util.Collection.toArray()' on a null object reference 我知道这是一个常见的问题,我已经看过了其他的答案和解决方案。我已尝试初始化列表,但仍然无法修复错误。我想

我是一个android新手,正在尝试使用JSON填充spinner,但我一直遇到空指针异常-

  java.lang.NullPointerException: Attempt to invoke interface method
  java.lang.Object[] java.util.Collection.toArray()' on a null object
 reference
我知道这是一个常见的问题,我已经看过了其他的答案和解决方案。我已尝试初始化列表,但仍然无法修复错误。我想我在理解确切需要初始化的位置时遇到了问题

我的完整日志:

07-19 09:34:54.356 11199-11337/com.genx.meghna.makdver4 D/Result is: [{"car_number":"DL 2345"},{"car_number":"DL 53546"},{"car_number":"1472"},{"car_number":"m7894"},{"car_number":"nxjvjsv"}]
07-19 09:34:54.356 11199-11337/com.genx.meghna.makdver4 D/res =: [{"car_number":"DL 2345"},{"car_number":"DL 53546"},{"car_number":"1472"},{"car_number":"m7894"},{"car_number":"nxjvjsv"}]
07-19 09:34:54.357 11199-11337/com.genx.meghna.makdver4 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
   Process: com.genx.meghna.makdver4, PID: 11199
   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:818)
    Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
       at java.util.ArrayList.addAll(ArrayList.java:188)
       at com.genx.meghna.makdver4.Fragments.SendCarFragment$GetData.doInBackground(SendCarFragment.java:173)
       at com.genx.meghna.makdver4.Fragments.SendCarFragment$GetData.doInBackground(SendCarFragment.java:117)
       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:818) 
package com.genx.meghna.makdver4.Fragments;


import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.genx.meghna.makdver4.R;

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import static com.genx.meghna.makdver4.Fragments.LoginFragment.un;


public class SendCarFragment extends Fragment {

    TextView tv1, tv2, tv3;
    Spinner sp;
    RadioGroup rg;
    RadioButton rb1, rb2;
    Button btn;
    FragmentManager fm;
    ArrayList<String> carList;
    ArrayAdapter<String> adapter;
    String res;
    SharedPreferences spp;


    public SendCarFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_send_car, container, false);
        btn = rootView.findViewById(R.id.nextPage1);
        rg = rootView.findViewById(R.id.radioGroup1);
        rb1 = rootView.findViewById(R.id.rb1);
        rb2 = rootView.findViewById(R.id.rb2);

        sp = rootView.findViewById(R.id.spinnerSelectCar);

        spp=getContext().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (rg.getCheckedRadioButtonId() == -1) {
                    Toast.makeText(getContext(), "Select One Option", Toast.LENGTH_SHORT).show();
                } else {
                    if (rb1.isChecked()) {
                        fm = getFragmentManager();
                        fm.beginTransaction().replace(R.id.container, new ServiceCenterListFragment(), "Service center").commit();

                    } else {

                        fm = getFragmentManager();
                        fm.beginTransaction().replace(R.id.container, new SelectionFragment(), "Select Address").commit();
                    }
                }
            }
        });

        return rootView;
    }

   public void onStart(){
        super.onStart();
        String username1 = spp.getString(un, "userKey");
        GetData get = new GetData();
        get.execute(username1);
    }

    class GetData extends AsyncTask<String, Void, String> {
      List<String> list;
       protected void onPreExecute(){
            super.onPreExecute();
            list=new ArrayList<>();
        }

        @Override
        protected String doInBackground(String... params) {
            {
                try {
                    String username1 = params[0];

                    String link = "http://10.0.3.2//Traccar/getCars.php";
                    String myurl = "username=" + username1;
                    URL url = new URL(link);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("POST");
                    connection.getOutputStream().write(myurl.getBytes());
                    int response = connection.getResponseCode();
                    Log.d("Response code", "" + response);

                    if (response == HttpURLConnection.HTTP_OK) {
                        String line;
                        InputStreamReader isr = new InputStreamReader(connection.getInputStream());
                        BufferedReader br = new BufferedReader(isr);
                        StringBuilder buffer = new StringBuilder();
                        while ((line = br.readLine()) != null) {
                            buffer.append(line);
                            //res+=line;
                        }

                        Log.d("Result is", buffer.toString());
                        res = buffer.toString();
                        Log.d("res = ", res);
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            try{
                JSONArray jrr =  new JSONArray(res);
                for (int i=0; i<jrr.length(); i++) {
                    JSONObject obj = jrr.getJSONObject(i);
                    String name = obj.getString("car_number");
                    list.add(name);
                }
            } catch (JSONException e1) {
                e1.printStackTrace();
            }

            return res;
        }


        protected void onPostExecute(String res) {

            list.addAll(carList);
            adapter = new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1, carList);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp.setAdapter(adapter);


        }
    }
}
我的代码:

07-19 09:34:54.356 11199-11337/com.genx.meghna.makdver4 D/Result is: [{"car_number":"DL 2345"},{"car_number":"DL 53546"},{"car_number":"1472"},{"car_number":"m7894"},{"car_number":"nxjvjsv"}]
07-19 09:34:54.356 11199-11337/com.genx.meghna.makdver4 D/res =: [{"car_number":"DL 2345"},{"car_number":"DL 53546"},{"car_number":"1472"},{"car_number":"m7894"},{"car_number":"nxjvjsv"}]
07-19 09:34:54.357 11199-11337/com.genx.meghna.makdver4 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
   Process: com.genx.meghna.makdver4, PID: 11199
   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:818)
    Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
       at java.util.ArrayList.addAll(ArrayList.java:188)
       at com.genx.meghna.makdver4.Fragments.SendCarFragment$GetData.doInBackground(SendCarFragment.java:173)
       at com.genx.meghna.makdver4.Fragments.SendCarFragment$GetData.doInBackground(SendCarFragment.java:117)
       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:818) 
package com.genx.meghna.makdver4.Fragments;


import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.genx.meghna.makdver4.R;

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import static com.genx.meghna.makdver4.Fragments.LoginFragment.un;


public class SendCarFragment extends Fragment {

    TextView tv1, tv2, tv3;
    Spinner sp;
    RadioGroup rg;
    RadioButton rb1, rb2;
    Button btn;
    FragmentManager fm;
    ArrayList<String> carList;
    ArrayAdapter<String> adapter;
    String res;
    SharedPreferences spp;


    public SendCarFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_send_car, container, false);
        btn = rootView.findViewById(R.id.nextPage1);
        rg = rootView.findViewById(R.id.radioGroup1);
        rb1 = rootView.findViewById(R.id.rb1);
        rb2 = rootView.findViewById(R.id.rb2);

        sp = rootView.findViewById(R.id.spinnerSelectCar);

        spp=getContext().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (rg.getCheckedRadioButtonId() == -1) {
                    Toast.makeText(getContext(), "Select One Option", Toast.LENGTH_SHORT).show();
                } else {
                    if (rb1.isChecked()) {
                        fm = getFragmentManager();
                        fm.beginTransaction().replace(R.id.container, new ServiceCenterListFragment(), "Service center").commit();

                    } else {

                        fm = getFragmentManager();
                        fm.beginTransaction().replace(R.id.container, new SelectionFragment(), "Select Address").commit();
                    }
                }
            }
        });

        return rootView;
    }

   public void onStart(){
        super.onStart();
        String username1 = spp.getString(un, "userKey");
        GetData get = new GetData();
        get.execute(username1);
    }

    class GetData extends AsyncTask<String, Void, String> {
      List<String> list;
       protected void onPreExecute(){
            super.onPreExecute();
            list=new ArrayList<>();
        }

        @Override
        protected String doInBackground(String... params) {
            {
                try {
                    String username1 = params[0];

                    String link = "http://10.0.3.2//Traccar/getCars.php";
                    String myurl = "username=" + username1;
                    URL url = new URL(link);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("POST");
                    connection.getOutputStream().write(myurl.getBytes());
                    int response = connection.getResponseCode();
                    Log.d("Response code", "" + response);

                    if (response == HttpURLConnection.HTTP_OK) {
                        String line;
                        InputStreamReader isr = new InputStreamReader(connection.getInputStream());
                        BufferedReader br = new BufferedReader(isr);
                        StringBuilder buffer = new StringBuilder();
                        while ((line = br.readLine()) != null) {
                            buffer.append(line);
                            //res+=line;
                        }

                        Log.d("Result is", buffer.toString());
                        res = buffer.toString();
                        Log.d("res = ", res);
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            try{
                JSONArray jrr =  new JSONArray(res);
                for (int i=0; i<jrr.length(); i++) {
                    JSONObject obj = jrr.getJSONObject(i);
                    String name = obj.getString("car_number");
                    list.add(name);
                }
            } catch (JSONException e1) {
                e1.printStackTrace();
            }

            return res;
        }


        protected void onPostExecute(String res) {

            list.addAll(carList);
            adapter = new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1, carList);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp.setAdapter(adapter);


        }
    }
}
package com.genx.meghna.makdver4.Fragments;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentManager;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.RadioButton;
导入android.widget.RadioGroup;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.genx.meghna.makdver4.R;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
导入静态com.genx.meghna.makdver4.Fragments.LoginFragment.un;
公共类SendCarFragment扩展了片段{
文本视图tv1、tv2、tv3;
纺纱机;
放射组rg;
单选按钮rb1、rb2;
按钮btn;
碎片管理器fm;
ArrayList carList;
阵列适配器;
字符串res;
共享参考资料;
公共SendCarFragment(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图根视图=充气机。充气(R.layout.fragment\u send\u car,container,false);
btn=rootView.findviewbyd(R.id.nextPage1);
rg=rootView.findviewbyd(R.id.1);
rb1=rootView.findviewbyd(R.id.rb1);
rb2=rootView.findviewbyd(R.id.rb2);
sp=rootView.findviewbyd(R.id.spinnerSelectCar);
spp=getContext().getSharedReferences(“MyPrefs”,Context.MODE\u PRIVATE);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(rg.getCheckedRadioButtonId()=-1){
Toast.makeText(getContext(),“选择一个选项”,Toast.LENGTH_SHORT.show();
}否则{
if(rb1.isChecked()){
fm=getFragmentManager();
fm.beginTransaction().replace(R.id.container,新ServiceCenterListFragment(),“服务中心”).commit();
}否则{
fm=getFragmentManager();
fm.beginTransaction().replace(R.id.container,new SelectionFragment(),“Select Address”).commit();
}
}
}
});
返回rootView;
}
public void onStart(){
super.onStart();
字符串username1=spp.getString(un,“userKey”);
GetData get=新建GetData();
get.execute(username1);
}
类GetData扩展异步任务{
名单;
受保护的void onPreExecute(){
super.onPreExecute();
列表=新的ArrayList();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
{
试一试{
字符串username1=params[0];
字符串链接=”http://10.0.3.2//Traccar/getCars.php";
字符串myurl=“username=”+username1;
URL=新的URL(链接);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.getOutputStream().write(myurl.getBytes());
int response=connection.getResponseCode();
Log.d(“响应代码”,“响应+响应”);
if(response==HttpURLConnection.HTTP\u OK){
弦线;
InputStreamReader isr=新的InputStreamReader(connection.getInputStream());
BufferedReader br=新的BufferedReader(isr);
StringBuilder缓冲区=新的StringBuilder();
而((line=br.readLine())!=null){
buffer.append(行);
//res+=直线;
}
Log.d(“结果是”,buffer.toString());
res=buffer.toString();
Log.d(“res=”,res);
}
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
试一试{
JSONArray jrr=新JSONArray(res);

对于(int i=0;i您有一个
carList
和一个
list
。您不会初始化或向
carList
添加项目,而是尝试将其传递给
list.addAll(carList);
,这自然无法工作

由于数据已经在
列表中
您应该能够这样做

class GetData extends AsyncTask<String, Void, List<String>> {
   List<String> list;

   protected void onPreExecute(){
        super.onPreExecute();
        list=new ArrayList<>();
    }

    @Override
    protected String doInBackground(String... params) {
        {
            try {
                String username1 = params[0];

                String link = "http://10.0.3.2//Traccar/getCars.php";
                String myurl = "username=" + username1;
                URL url = new URL(link);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
                connection.getOutputStream().write(myurl.getBytes());
                int response = connection.getResponseCode();
                Log.d("Response code", "" + response);

                if (response == HttpURLConnection.HTTP_OK) {
                    String line;
                    InputStreamReader isr = new InputStreamReader(connection.getInputStream());
                    BufferedReader br = new BufferedReader(isr);
                    StringBuilder buffer = new StringBuilder();
                    while ((line = br.readLine()) != null) {
                        buffer.append(line);
                        //res+=line;
                    }

                    Log.d("Result is", buffer.toString());
                    res = buffer.toString();
                    Log.d("res = ", res);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try{
            JSONArray jrr =  new JSONArray(res);
            for (int i=0; i<jrr.length(); i++) {
                JSONObject obj = jrr.getJSONObject(i);
                String name = obj.getString("car_number");
                list.add(name);
            }
        } catch (JSONException e1) {
            e1.printStackTrace();
        }

        return list;
    }


    protected void onPostExecute(List<String> res) {

        adapter = new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1, res);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adapter);


    }
}
class GetData扩展异步任务{
名单;
受保护的void onPreExecute(){
super.onPreExecute();
列表=新的ArrayList();
}
@凌驾
受保护字符串