JSONObject无法转换为JSONArray - 我看不到ListView

时间:2014-12-17 09:19:53

标签: php android mysql json listview

当我尝试转换来自" http://www.rivedcreations.esy.es/mostrar_noticias_sqlhostinger.php"的PHP结果时,Android Studio会告诉我相同的JSON异常,我不知道如何显示数据在我的listView中。 mySQL和PHP之间的连接是正确的,因为我可以在webbrowser中看到数据。任何的想法?在此先感谢您的帮助!!

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;
        }
    }

3 个答案:

答案 0 :(得分:1)

非常感谢您的快速回复。你太棒了。附上你还可以看到我发现自己的问题的解决方案。哈哈哈。现在我很高兴。 ;)

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 :(得分:0)

此代码可以帮助您。此代码使用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
   }

答案 2 :(得分: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);