2016-09-09 36 views
0

我想在运行应用程序时使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; 

} 
+0

请编辑您的问题并发布完整的logcat错误报告。此外,如果可能的话,添加您收到的响应以及需要解析的响应。 –

+0

Thaks,我只是编辑问题。 –

+0

请检查密钥。在响应json你发布它是“代表团”,而在你使用的代码“Delegacion” –

回答

0

。而不是arrayList<Contact>我将使用ArrayList<String>

这里我已经删除了singleTone类。并在同一个类中添加了jsonArrayRequest代码。和数组列表中添加项目后,我已经叫adapter.notifyDataSetChanged();

MainActivity.class

public class MainActivity extends AppCompatActivity { 

    TextView txdeleg_lista; 
    Button btnObtener; 
    ArrayList<String> arrayList = new ArrayList<String>(); 
    ListView listView; 
    String json_url = "your url"; 
    ArrayAdapter<String> adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btnObtener = (Button) findViewById(R.id.btnObtener); 
    txdeleg_lista = (TextView) findViewById(R.id.txdeleg_lista); 
    listView = (ListView) findViewById(R.id.lvDelegacion); 

    adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList); 

    btnObtener.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //startActivity(new Intent(MainActivity.this, DesplegarLista.class)); 

      listView.setAdapter(adapter); 


      request(); 

     } 
    }); 
    } 

    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); 
           String contact = jsonObject.getString("UFULLNAME"); 
           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); 
    } 
} 

检查,如果您有任何疑问评论。

+0

感谢您的回答! 我只是尝试转换为JSONObject和我得到一个JSONException:没有值为Delegacion在:联系人联系人=新联系人(jsonObject.getString(“Delegacion”); 和新的Response.Listener < JSONArray >(){ –

+0

您可以发布您的错误日志? –

+0

我只是改变BackgroundTask.class“Delegacion”到“delegacion”并没有什么happends –