java - 将 JSON 数据加载到 alertdialog 到 spinner
问题描述
我正在尝试将 Json 数据检索到 alertdialog 中的微调器中,它仅在微调器在同一活动中时加载,但如果它在 alertDialog 中,它会给我这个错误:
尝试在空对象引用上调用虚拟方法“void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)”
package exir.exir;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import exir.exir.Helpers.FormAdapter;
import exir.exir.Helpers.PatientsAdapter;
import exir.exir.Helpers.PricrMAdapter;
import exir.exir.Helpers.RequestHandler;
import exir.exir.Helpers.SharedPrefManager;
import exir.exir.Rertofit.MyLabAPI;
import exir.exir.Utils.Constants;
import exir.exir.model.Form;
import exir.exir.model.PMenus;
import exir.exir.model.PriceM;
import exir.exir.model.RPatient;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import static android.R.layout.simple_spinner_item;
public class AddPatient extends AppCompatActivity {
private EditText patientname, gender , age , agetype , tel ,
phone , total , notes , testno , testprice , testnotes , testname1 , testno1 , testprice1 , testnotes1 ;
private Button add ;
private String URLstring = "https://demonuts.com/Demonuts/JsonTest/Tennis/json_parsing.php";
String labId , labpriceMenuNO ;
private static ProgressDialog mProgressDialog;
private ArrayList<PMenus> goodModelArrayList;
private ArrayList<String> names = new ArrayList<String>();
private Spinner PmSpinner;
MyLabAPI myLabAPI ;
CompositeDisposable compositeDisposable = new CompositeDisposable();
List<PriceM> pricemenilist;
ArrayAdapter<String> adapter;
ListView FormList ;
EditText editThen , edtSdt;
Button btn_sua , btn_xoa , btn_then ;
ArrayList<Form> formArrayList ;
FormAdapter formAdapter;
FloatingActionButton newTest ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_patient);
testno = (EditText)findViewById(R.id.testno);
testprice = (EditText)findViewById(R.id.testprice);
testnotes = (EditText)findViewById(R.id.testnotes);
newTest = (FloatingActionButton)findViewById(R.id.
newTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showNewTestDialog();
}
});
myLabAPI = Constants.getAPI();
add =(Button)findViewById(R.id.addPatient);
}
private void showNewTestDialog() {
AlertDialog.Builder alertDialog = new
AlertDialog.Builder(AddPatient.this);
alertDialog.setTitle("Add New Test ");
alertDialog.setMessage("PLease fill the info ");
LayoutInflater inflater = this.getLayoutInflater();
View formLayout = inflater.inflate(R.layout.newtest_layout, null);
editThen = formLayout.findViewById(R.id.FName);
edtSdt = formLayout.findViewById(R.id.FPrice);
goodModelArrayList = new ArrayList<>();
PmSpinner = (Spinner)findViewById(R.id.testname);
PmSpinner.setAdapter(adapter);
PmSpinner.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int
position, long id) {
String item = parent.getItemAtPosition(position).toString() ;
String testum = goodModelArrayList.get(position).getCity() ;
String price = goodModelArrayList.get(position).getCountry() ;
testnotes.setText(item);
testno.setText(testum);
testprice.setText(price);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
retrieveJSON();
alertDialog.setView(formLayout);
alertDialog.setIcon(R.drawable.ic_shopping_cart_black_24dp);
alertDialog.setPositiveButton("YES", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
//some code
}
});
alertDialog.setNegativeButton("No", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
alertDialog.show();
}
private void retrieveJSON() {
StringRequest stringRequest = new StringRequest(
Request.Method.GET,
URLstring,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("strrrrr", ">>" + response);
try {
JSONObject obj = new JSONObject(response);
goodModelArrayList = new ArrayList<>();
JSONArray dataArray = obj.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
PMenus playerModel = new PMenus();
JSONObject dataobj =
dataArray.getJSONObject(i);
playerModel.setName(dataobj.getString("name"));
playerModel.setCountry(dataobj.getString("country"));
playerModel.setCity(dataobj.getString("city"));
playerModel.setImgURL(dataobj.getString("imgURL"));
goodModelArrayList.add(playerModel);
}
for (int i = 0; i < goodModelArrayList.size();
i++){
names.add(goodModelArrayList.get(i).getName().toString());
}
ArrayAdapter<String> spinnerArrayAdapter = new
ArrayAdapter<String>(AddPatient.this, simple_spinner_item, names);
spinnerArrayAdapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item); // The drop down view
PmSpinner.setAdapter(spinnerArrayAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//displaying the error in toast if occurrs
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
// request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
解决方案
尝试这个.....
JSONObject c = JSONfunctions.getJSONfromURL("http://192.168.1.104/OnlineTicketBooking/book_now1.php?movieid='72'");
try {
JSONArray jarray = c.getJSONArray("offer_detail");
ArrayList<String> xyz= new ArrayList<String>();
for(int i = 0; i < jarray.length(); i++){
JSONArray timeArray = jarray.getJSONObject(i).getJSONArray("showtime");
for(int j = 0; j < timeArray .length(); j++){
xyz.add(timeArray .getString(j));
Log.d("get value",timeArray .getString(j));`enter code here`
}
}
推荐阅读
- javascript - 如何替换 HTML 字符串中的 value 属性?
- sql-server - 在 SSIS 中生成唯一的随机数
- python - 如何根据注释属性对networkx python图中的节点进行分组?
- mysql - mysqldump 后删除目录时出现错误代码
- r - R 为 sfc_POLYGON 中的多边形分配 ID 以进行绘图
- c - CLion 中的多个 C 源文件
- python - Heroku Flask 应用程序:将 wsgi.py 放在哪里?
- php - 为什么 PHP 不显示所有语法错误?
- arrays - 无法在 API React JS 返回的数组中获取数组
- java - BuiltinClassLoader 无法解析为类型