尝试用JSON填充微调器并获得';java.lang.Object[]java.util.Collection.toArray()';关于空对象引用
我是一个android新手,正在尝试使用JSON填充spinner,但我一直遇到空指针异常-尝试用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 我知道这是一个常见的问题,我已经看过了其他的答案和解决方案。我已尝试初始化列表,但仍然无法修复错误。我想
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();
}
@凌驾
受保护字符串