当我尝试转换来自" 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;
}
}
答案 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);