2016-07-05 10 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 からのドロップダウンメニューを作成します。 soapuiを使ってリモートサーバーにアクセスしようとしていたので、.jsonファイルを資産の下のプロジェクトにコピーしました。コードは私にエラーを与えませんが、私のアプリは実行されません。問題は、.jsonファイルを開く方法、またはオブジェクトにアクセスする方法です。.jsonファイル私は私のプロジェクトであるJSONファイルからデータをドロップダウンメニューを作成したい

ありがとうございます。

+0

あなたは何を意味するか、アプリが実行されませんか?例外が発生してクラッシュするのですか、またはあなたのリストにデータが入っていませんか?クラッシュした場合は、LogCatを投稿してください。 – Rohan

+0

申し訳ありませんが私はそれが私がそれをしたい、それはドロップダウンメニューを作成し、その内容を。 – che

+0

通常の文字列配列を作成すると、ボタンを押すとドロップダウンメニューが作成されます。 – che

答えて

0

JSONファイルのStringを取得するには、次の関数を試してみてください。

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

です。 データが十分に大きい場合は、LoganSquareやJacksonなどのライブラリを使用してJSONデータを解析することをお勧めします。

0

あなたのアプリがJsonファイルから正しく読み込まれていることを確認する必要があります。され、次の作業コード:

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

とレイアウト:

資産フォルダ内の
<?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> 

とJSONファイル:

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

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

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

}, 
{ 
    "formule": "Force", 

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

}, 

] 
} 
関連する問題