我想在运行应用程序时使jsonRequest不按任何按钮并保存数据。我只是添加一个互联网连接检查的方法:JSONArray到ListView数组数据没有显示
如果连接到互联网它的真实,使json请求传递给微调,并保存数据。
当互联网连接为false时,只需将sharedPreferences中的数据加载到微调器即可。
该应用程序运行良好的按钮(与简单的onClick方法),并没有verificaConexion方法。
但是,当我删除按钮,添加verificaConexion方法,我有互联网连接,只是,使json请求,显示数据在微调不保存数据当我关闭应用程序,删除WiFi,打开应用程序,微调器什么都不显示。
由于任何原因,方法保存和加载数据不起作用。
这是我的onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnObtener = (Button) findViewById(R.id.btnObtener);
spDelegaciones = (Spinner)findViewById(R.id.spDelegaciones);
btnGuardar = (Button) findViewById(R.id.btnGuardar);
btnCargar = (Button) findViewById(R.id.btnCargar);
txJsonArray = (TextView) findViewById(R.id.txJsonArray);
verificaConexion(this);
}
这是我的JSON请求方法,做工精细:
public void request() {
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(json_url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
Log.e("jsonArray", "" + jsonArray);
if (jsonArray == null) {
Toast.makeText(MainActivity.this, "EL JSONArray esta VACIO !!! ", Toast.LENGTH_SHORT).show();
} else {
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject jsonObject = jsonArray.getJSONObject(i);
//con el php JsonArrayRequest2.php
// String contact = jsonObject.getString("delegacion");
//con el php JsonArrayVariosCampos.php
String contact = jsonObject.getString("Delegacion");
arrayList.add(contact);
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter.notifyDataSetChanged();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "ERROR...", Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(jsonArrayRequest);
}
我guardarDatos方法来保存数据:
public boolean guardarDatos(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor mEdit1 = sp.edit();
/* sKey is an array */
mEdit1.putInt("Status_size", arrayList.size());
for(int i=0;i<arrayList.size();i++)
{
mEdit1.remove("Status_" + i);
mEdit1.putString("Status_" + i, arrayList.get(i));
}
Toast.makeText(MainActivity.this, " DATOS GUARDADOS ", Toast.LENGTH_SHORT).show();
return mEdit1.commit();
}
和我的cargarDatos方法加载数据:
public void cargarDatos(){
SharedPreferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(this);
arrayList.clear();
int size = mSharedPreference1.getInt("Status_size", 0);
for(int i=0;i<size;i++)
{
arrayList.add(mSharedPreference1.getString("Status_" + i, null));
}
adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
spDelegaciones.setAdapter(adapter);
Toast.makeText(MainActivity.this, " DATOS CARGADOS ", Toast.LENGTH_SHORT).show();
}
,这里是我的课,检查互联网连接:由于您使用的只有一个接触类字符串
public boolean verificaConexion(Context ctx){
boolean bConectado = false;
ConnectivityManager connec = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] redes = connec.getAllNetworkInfo();
for (int i = 0; i < 2; i++) {
if (redes[i].getState() == NetworkInfo.State.CONNECTED) {
bConectado = true;
if(bConectado) {
Toast.makeText(MainActivity.this, " con conexion ", Toast.LENGTH_LONG).show();
adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
spDelegaciones.setAdapter(adapter);
request();
guardarDatos();
}else {
cargarDatos();
}
}else{
}
}
return bConectado;
}
请编辑您的问题并发布完整的logcat错误报告。此外,如果可能的话,添加您收到的响应以及需要解析的响应。 –
Thaks,我只是编辑问题。 –
请检查密钥。在响应json你发布它是“代表团”,而在你使用的代码“Delegacion” –