Я делаю приложение, которое анализирует данные JSON в виде списка. У меня это не работает; он не возвращает мне никаких данных.
Это мой код:
public class MainActivity extends AppCompatActivity {
ListView listview;
ArrayAdapter<String> adapter;
String[] data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (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 orders";
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 arr = new JSONArray(dbResult);
JSONObject jo = null;
data = new String[arr.length()];
for (int i = 0; i < 1; i++) {
jo = arr.getJSONObject(i);
data[i] = jo.getString("name");
}
adapter = new ArrayAdapter<String>(this, R.layout.layout_list, R.id.list_item, data);
listview.setAdapter(adapter);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Это ошибка в логарифме:
of type org.json.JSONObject cannot be converted to JSONArray
Это json в веб-сервисе:
{
"orders":[
{
"naam":"J. Peeters",
"adres":"Kettingstraat 12",
"postcode":"5611 RD",
"bestelling":[
{
"Pizza":"Napolitane"
},
{
"Pizza":"Margarita"
}
]
},
{
"naam":"H. Wissink",
"adres":"Frederik van Eedenplein 5",
"postcode":"5611 KT",
"bestelling":[
{
"Pizza":"4-Stagione"
},
{
"Pizza":"Siciliane"
},
{
"Pizza":"4-Stagione"
}
]
},
{
"naam":"M. Huisman",
"adres":"Hertogstraat 17",
"postcode":"5611 PB",
"bestelling":[
{
"Pizza":"4-Stagione"
},
{
"Pizza":"Napolitane"
},
{
"Pizza":"4-Stagione"
},
{
"Pizza":"Siciliane"
},
{
"Pizza":"Salami"
}
]
},
{
"naam":"H. Moors",
"adres":"Mauritsstraat 9",
"postcode":"5611 GV",
"bestelling":[
{
"Pizza":"Calzone"
}
]
},
{
"naam":"H. Jansen",
"adres":"Stationsplein 23",
"postcode":"5611 AC",
"bestelling":[
{
"Pizza":"4-Stagione"
},
{
"Pizza":"4-Stagione"
}
]
},
{
"naam":"G.M. Verkuijlen-vd Ven",
"adres":"Tramstraat 54",
"postcode":"5611 CR",
"bestelling":[
{
"Pizza":"Napolitane"
},
{
"Pizza":"Margarita"
}
]
}
]
}
Также попробуйте записать результат вашего запроса. возможно, ваш HTTP-запрос не возвращает json
Привет, @Stefan, сначала вам нужно преобразовать свой результат в объект JSON, поскольку это объект json и цикл через массив внутренних заказов
привет @Shanmugam, как я могу сделать это с помощью моего кода?




Вы получаете JSONObject из db, а не из массива, массив находится внутри этого объекта. Вы должны сопоставить ответ веб-службы с JSONObject и сопоставить поле bestelling с JSONArray. И ... как было упомянуто в комментарии, используйте некоторую библиотеку, чтобы помочь вам в этом, например GSON.
Не могли бы вы сделать это для меня? Понятия не имею, как это сделать.
Если у вас нет идеи, получите идею. Это просто и, что более важно, теперь вы знаете, что делать. Просить кого-то делать то, что вы знаете, - очень грубо.
он мог бы просто сказать «нет, я не хочу», это тоже было бы хорошо. не отвечать тоже грубо. К тому же я очень тороплюсь, поэтому у меня нет времени тратить 2 часа в Google, пытаясь найти ответ.
@stefandeboer: milano прав (хотя я мог бы выразить это более дипломатично). Мы поощряем здесь самостоятельность, а соотношение помощников к людям, нуждающимся в помощи, означает, что мы действительно опасаемся уступать просьбам о бесплатной работе. Можете ли вы использовать полученную новую информацию в качестве отправной точки для новых исследований? Это может быть проще, чем вы думаете.
Проблема здесь JSONArray arr = new JSONArray(dbResult);
Меняем его на JSONObject arr = new JSONObject(dbResult);
похоже, что вы не опубликовали полные данные json. Если это не решит проблему, опубликуйте полную версию json data.
это не работает. Он выдает ошибку на i в jo = arr.getJSONObject (i) Это сообщение об ошибке: .getJSONObject (java.lang.String) в JSONObject не может быть применен к (int)
Я также обновил полные данные JSON из веб-службы.
JSONObject jsonobject = новый JSONObject (dbResult); JSONArray jsonarray = jsonobject.getJsonArray («заказы»); Чтобы узнать длину jsonarray, используйте; int jsonarrayLength = jsonarray.length (); // Это подсчитает количество объектов в массиве. Здесь вы работаете с неправильным подходом, обращаясь к «имени»; не используйте здесь какой-либо цикл.
просто используйте google GSON .. google it