2016-07-05 55 views
5
package com.example.root.myapplication; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

import org.json.JSONArray; 
import org.json.JSONException; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    Button btnCommercial; 

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

     final ListView list11 = (ListView) findViewById(R.id.listView1); 
     ArrayList<String> authorities = getAuthorities("AuthorityList.json"); 
     final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, authorities); 
     btnCommercial = (Button) findViewById(R.id.btnCommercial); 
     btnCommercial.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         list11.setAdapter(adapter); 
        } 
       }); 
    } 

    private ArrayList<String> getAuthorities(String fileName) { 
     JSONArray jsonArray = null; 
     ArrayList<String> AuthList = new ArrayList<String>(); 

     try { 
      InputStream inputStream = getAssets().open(fileName);  //open the inputStream to the file 
      int size = inputStream.available();       //size of the entire json object 
      byte[] data = new byte[size];        //array that will store all the data 
      inputStream.read(data);          //reading data into the array for the file 
      inputStream.close();          //close the input steam 
      String json = new String(data, "UTF-8"); 
      jsonArray = new JSONArray(json); 

      if (jsonArray != null) { 
       for (int i = 0; i < jsonArray.length(); i++) { 
        AuthList.add(jsonArray.getJSONObject(i).getString("description")); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); return null; 
     } catch (JSONException je) { 
      je.printStackTrace(); return null; 
     } 
     return AuthList; 
    } 
} 

enter image description here Voglio creare un menu a discesa con i dati da un file JSON che è nel mio progetto. Stavo cercando di accedere al mio server remoto tramite soapui, quindi ho copiato il file .json nel mio progetto sotto asset. Il codice non mi dà un errore, ma la mia app non verrà eseguita. Penso che il problema sia come sto aprendo il file .json o come accedo agli oggetti.Creazione di un menu a discesa da un file .json

Grazie in anticipo.

+0

Cosa vuoi dire, applicazione non funzionerà? Crolla con un'eccezione o la tua lista non è popolata? Se si blocca, pubblica il tuo LogCat. – Rohan

+0

Mi spiace, intendo dire che non farò ciò che voglio, cioè creare il menu a tendina e riempirlo con i contenuti del file .json. – che

+0

Quando creo un array di stringhe normale, crea il menu a discesa quando preme il pulsante. Trovando molto difficile eseguire il debug in Android in generale .. – che

risposta

0

È possibile provare la seguente funzione per ottenere una stringa per il file JSON.

public static String AssetJSONFile (String filename, Context context) throws IOException { 
     AssetManager manager = context.getAssets(); 
     InputStream file = manager.open(filename); 
     byte[] formArray = new byte[file.available()]; 
     file.read(formArray); 
     file.close(); 

     return new String(formArray); 
    } 

e quindi analizzarlo. Si consiglia di utilizzare alcune librerie (come LoganSquare o Jackson) per analizzare i dati JSON se i dati sono sufficientemente grandi.

0

devi assicurarti che l'app sia stata letta correttamente dal file Json. Di seguito è riportato il codice di lavoro:

package com.example.a386019.spinnerjson; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 

public class SpinnerActivity extends AppCompatActivity { 

String json_string; 
JSONObject jsonObj; 
JSONArray jsonArray; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_spinner); 
    json_string= loadJSONFromAsset(); 

    ArrayList<String> messages = new ArrayList<String>(); 

    { 

     try { 
      jsonObj =new JSONObject(json_string); 
      jsonArray =jsonObj.getJSONArray("formules"); 
      String formule,url; 
      for (int i = 0; i < jsonArray.length(); i++){ 
       JSONObject jObj = jsonArray.getJSONObject(i); 
       formule= jObj.getString("formule"); 
       messages.add(formule); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 


    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_dropdown_item, messages); 

    Spinner spinner = (Spinner)findViewById(R.id.spinner); 
    spinner.setAdapter(adapter); 

} 


public String loadJSONFromAsset() { 
    String json = null; 
    try { 
     InputStream is = getAssets().open("formules.json"); 
     int size = is.available(); 
     byte[] buffer = new byte[size]; 
     is.read(buffer); 
     is.close(); 
     json = new String(buffer, "UTF-8"); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
     return null; 
    } 
    return json; 
} 
} 

e il layout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.a386019.spinnerjson.SpinnerActivity"> 

<Spinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/spinner" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="42dp" /> 
</RelativeLayout> 

e il file JSON nella cartella Assets:

{ 
    "formules": [ 
      { 
    "formule": "Linear Motion", 

}, 
{ 
    "formule": "Constant Acceleration Motion", 

}, 
{ 
    "formule": "Projectile Motion", 

}, 
{ 
    "formule": "Force", 

}, 
{ 
    "formule": "Work, Power, Energy", 

}, 

] 
}