JSONObject не может быть преобразован в JSONArray — я не вижу ListView

Когда я пытаюсь преобразовать результат PHP, полученный изhttp://www.rivedcreations.esy.es/mostrar_noticias_sqlhostinger.php«Android Studio сообщает мне об этом же исключении JSON, и я не знаю, как я могу показать данные в моем listView. Связь между MySQL и PHP правильная, потому что я могу видеть данные в своем веб-браузере. Любая идея? Спасибо в заранее за вашу помощь !!

public class MainActivity extends Activity implements View.OnClickListener {

ListView listaJson;
Button BotonIntroducirNoticia;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Todo sobre el listView
listaJson = (ListView) findViewById(R.id.listaJson);
Tarea1 tarea1 = new Tarea1();
tarea1.cargarContenido(getApplicationContext());
tarea1.execute(listaJson);
// Todo sobre el Boton
BotonIntroducirNoticia = (Button) findViewById(R.id.bt_nuevanoticia);
BotonIntroducirNoticia.setOnClickListener(this);
}
class Tarea1 extends AsyncTask<ListView, Void, ArrayAdapter<Clase_tabla_noticias>> {
Context contexto;
ListView list;
InputStream is;
ArrayList<Clase_tabla_noticias> listaclientes = new ArrayList<Clase_tabla_noticias>();
public void cargarContenido(Context contexto) {
// En que actividad se va a crear el contexto
this.contexto = contexto;
}
protected void onPreExecute() {
}
//Devuelve un ArrayAdapter y recibe un listView
@Override
protected ArrayAdapter<Clase_tabla_noticias> doInBackground(ListView... params) {
list = params[0];
String String_Resultado_de_JSON_Array = "fallo";
Clase_tabla_noticias cli;
//Crear la conexión HTTP
HttpClient cliente = new DefaultHttpClient();
HttpGet peticionGet = new HttpGet("http://www.rivedcreations.esy.es/mostrar_noticias_sqlhostinger.php");// Url del Servidor
try {
HttpResponse response = cliente.execute(peticionGet);
HttpEntity contenido = response.getEntity();
is = contenido.getContent();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader buferlector = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String linea;
try {
while ((linea = buferlector.readLine()) != null) {
sb.append(linea);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
Log.e("AVISO", "Error al intentar capturar el String resultado del PHP "+e.toString());
}
//En la variable resultado tendremos lo que se saca directamente del PHP, un objeto JSON
String_Resultado_de_JSON_Array = sb.toString();
//Como lo que queremos es romperlo, le pasamos el String resultado mediante un Objeto JSON
try {
JSONArray JSON_Array = new JSONArray(String_Resultado_de_JSON_Array);
for (int i = 0; i < JSON_Array.length(); i++) {
JSONObject JSON_Objeto = JSON_Array.getJSONObject(i);
int id = JSON_Objeto.getInt("id");
String autor = JSON_Objeto.getString("autor");
String titulo = JSON_Objeto.getString("titulo");
cli = new Clase_tabla_noticias(id, autor, titulo);
listaclientes.add(cli);
Log.i("AVISO","id: " + id + ", autor: " + autor);
}
} catch (JSONException e) {
Log.e("AVISO", "Error al intentar el bucle de cambio de JSON_Array a JSON_Objeto "+e.toString());
}
ArrayAdapter<Clase_tabla_noticias> adaptador = new ArrayAdapter<Clase_tabla_noticias>(contexto, android.R.layout.simple_list_item_1, listaclientes);
return adaptador;
}
@Override
protected void onPostExecute(ArrayAdapter<Clase_tabla_noticias> result) {
list.setAdapter(result);
}
protected void onProgressUpdate(Void... values) {
}
}
public void onClick(View v) {
Intent intent;
switch (v.getId()) {
case R.id.bt_nuevanoticia:
intent = new Intent("es.esy.rivedcreations.beingfaureciamagazine.NoticiaActivity_Introducir");
startActivity(intent);
break;
}
}

0

Решение

Вы используете json, который вы получаете как массив json, а это не так, сначала вы должны получить внутренний jsonarray.
попробуйте изменить:

String_Resultado_de_JSON_Array = sb.toString();
//Como lo que queremos es romperlo, le pasamos el String resultado mediante un Objeto JSON
try {
JSONArray JSON_Array = new JSONArray(String_Resultado_de_JSON_Array);
for (int i = 0; i < JSON_Array.length(); i++) {
JSONObject JSON_Objeto = JSON_Array.getJSONObject(i);

в

String_Resultado_de_JSON_Array = sb.toString();
//Como lo que queremos es romperlo, le pasamos el String resultado mediante un Objeto JSON
try {
JSONObject json = new JSONObject(String_Resultado_de_JSON_Array);
JSONArray JSON_Array = json.getJSONArray("tabla_noticias");
for (int i = 0; i < JSON_Array.length(); i++) {
JSONObject JSON_Objeto = JSON_Array.getJSONObject(i);
0

Другие решения

Большое спасибо за ваш быстрый ответ. Ты удивительный. В приложении вы также можете найти решение моей собственной проблемы, которое я нашел. хахаха. Теперь я счастлив. 😉

try {
JSONObject JSON_Objeto = new JSONObject(String_Resultado_de_JSON_Array);
JSONArray JSON_Array = JSON_Objeto.getJSONArray("tabla_noticias");
for (int i = 0; i < JSON_Array.length(); i++) {
JSON_Objeto = JSON_Array.getJSONObject(i);
int id = JSON_Objeto.getInt("id");
String autor = JSON_Objeto.getString("autor");
String titulo = JSON_Objeto.getString("titulo");
cli = new Clase_tabla_noticias(id, autor, titulo);
listanoticias.add(cli);
}
} catch (JSONException e) {
Log.e("AVISO", "Error al intentar el bucle de cambio de JSON_Array a JSON_Objeto " + e.toString());
}
ArrayAdapter < Clase_tabla_noticias > adaptador = new ArrayAdapter < Clase_tabla_noticias > (contexto, android.R.layout.simple_list_item_1, listanoticias);
return adaptador;
1

Этот код поможет вам. Этот код использует Simple JSON Parser

try {
Object obj = parser.parse(data); // data = JSON response on calling API
JSONObject jsonObject = (JSONObject) obj;
JSONArray msg = (JSONArray) jsonObject.get("tabla_noticias");
Iterator<String> iterator = msg.iterator();
while (iterator.hasNext()) {
output.add(iterator.next()); // output is String List
}
String[] stringArray = output.toArray(new String[0]);
return stringArray;
}
catch (Exception e)
{
//Exception
}
0
По вопросам рекламы [email protected]