java - 带有 JSON 的网络服务
问题描述
我正在尝试制作一个从 Web 服务获取 JSON 数据并将其放入列表视图的应用程序,但这不起作用。它不会崩溃或给出错误消息。网络服务没有给我任何数据。
这是我的代码:公共类 MainActivity 扩展 AppCompatActivity {
ListView listview;
ArrayAdapter<String> adapter;
String[] data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = findViewById(R.id.listview);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());
MPWebservice();
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MainActivity.this, bestelling.class);
intent.putExtra("naam", listview.getItemAtPosition(position).toString());
startActivity(intent);
}
});
}
private void MPWebservice() {
String Webadres = null;
String dbResult = "empty";
dbConnect database = new dbConnect(this);
try{
String query = "SELECT * FROM adres";
Webadres = "?query=" + URLEncoder.encode(query, "UTF-8");
String con = "https://amje.000webhostapp.com/mariosPizzaJSON.php" + Webadres;
dbResult = database.execute(con).get();
}
catch (Exception e){
e.printStackTrace();
}
try{
JSONArray ja = new JSONArray(dbResult);
JSONObject jo = null;
data = new String[ja.length()];
for (int i = 0; i < ja.length(); i++){
jo = ja.getJSONObject(i);
data[i] = jo.getString("Naam");
}
adapter = new ArrayAdapter<String>(this, R.layout.layout_list, R.id.list_item, data);
listview.setAdapter(adapter);
}
catch (Exception e){
e.printStackTrace();
}
}
}
这是来自网络服务的 JSON 数据:
orders: [
{
naam: "J. Hecker",
adres: "St Rochusstraat 40",
postcode: "5611 RJ",
bestelling: [
{
Pizza: "Siciliane"
},
{
Pizza: "4-Stagione"
},
{
Pizza: "Hawaii"
},
{
Pizza: "Siciliane"
}
]
},
这是 Logcat :
05-30 11:22:26.415 11361-11361/com.example.stefan.mad_oefenexamen W/System.err: org.json.JSONException: Value {"orders":[{"naam":"P. Melissen","adres":"Grote Berg 101","postcode":"5611 KJ","bestelling":[{"Pizza":"Hawaii"},{"Pizza":"Siciliane"},{"Pizza":"Napolitane"},{"Pizza":"Margarita"},{"Pizza":"Margarita"}]},{"naam":"M. Dijk","adres":"Jan Smitzlaan 2","postcode":"5611 LE","bestelling":[{"Pizza":"Margarita"}]},{"naam":"Th.M. Neessen","adres":"Hoefkestraat 31","postcode":"5611 RM","bestelling":[{"Pizza":"Napolitane"}]},{"naam":"T. Bazelmans","adres":"Hertog Hendrik van Brabantplein 29","postcode":"5611 PG","bestelling":[{"Pizza":"4-Stagione"},{"Pizza":"Hawaii"},{"Pizza":"Siciliane"},{"Pizza":"Margarita"},{"Pizza":"Salami"},{"Pizza":"4-Stagione"}]},{"naam":"L. Cals","adres":"Geldropseweg 5","postcode":"5611 SB","bestelling":[{"Pizza":"Margarita"},{"Pizza":"Napolitane"}]}]} of type org.json.JSONObject cannot be converted to JSONArray
解决方案
问题是来自服务器的响应是 JSONObject 而不是 JSONArray。而这个 JSONObject 包含以下 JSONArray
{
naam: "J. Hecker",
adres: "St Rochusstraat 40",
postcode: "5611 RJ",
bestelling: [
{
Pizza: "Siciliane"
},
{
Pizza: "4-Stagione"
},
{
Pizza: "Hawaii"
},
{
Pizza: "Siciliane"
}
]
},
要获得这些值,请这样做,假设您的 JSONObject 响应是 jsonResponseObject
try{
JSONArray jsonArray=jsonResponseObject.getJSONArray("orders");
for(int i=0;i<jsonArray.length(),i++){
JSONObject jsonObject=jsonArray.getJSONObject(i);
Log.d("Naam",jsonObject.getString("naam"));
}catch(Exception e){
e.printstacktrace();
}
}
推荐阅读
- amazon-web-services - 在aws中使用https for flask api 无需购买域名
- php - 错误 - 未为突变配置架构,尽管架构中包含突变
- android - Android Safetynet Attestation 内置重试逻辑
- scala - 不参照原作,为高等类型召唤辅助
- firebase - firebase clearAllNotifications() 在 ionic 3 中不起作用
- java - 关于返回参数的java mapper ibatis错误
- xamarin.android - 为什么 Xamarin Android 中的 BiometricPrompt API 不包含 onAuthenticationError 回调
- css - 不考虑大小的媒体查询
- javascript - PDF.JS with CANVAS Draw : 在画布中绘制矩形,使用 pdf.js 加载 PDF
- c# - ajax调用后如何停止刷新页面(仅在保存图像时发生)?