Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从.json文件创建下拉菜单_Android_Json_Spinner_Assets - Fatal编程技术网

Android 从.json文件创建下拉菜单

Android 从.json文件创建下拉菜单,android,json,spinner,assets,Android,Json,Spinner,Assets,我想创建一个下拉菜单,其中包含项目中JSON文件中的数据。我很难通过soapui访问我的远程服务器,所以我将.json文件复制到我的项目中的资产下。代码没有给我错误,但我的应用程序无法运行。我认为问题在于如何打开.json文件或如何访问对象 提前感谢。您可以尝试以下函数为JSON文件获取字符串 package com.example.root.myapplication; import android.content.Intent; import android.support.v7.app.

我想创建一个下拉菜单,其中包含项目中JSON文件中的数据。我很难通过soapui访问我的远程服务器,所以我将.json文件复制到我的项目中的资产下。代码没有给我错误,但我的应用程序无法运行。我认为问题在于如何打开.json文件或如何访问对象


提前感谢。

您可以尝试以下函数为JSON文件获取字符串

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;
    }
}
然后解析它。
如果您的数据足够大,我建议您使用LoganSquare或Jackson等库来解析JSON数据。

您必须确保应用程序正确读取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);
    }

什么意思,应用程序无法运行?它是否因异常而崩溃,或者您的列表未填充?如果它崩溃,请发布日志。抱歉,我的意思是它不会执行我希望它执行的操作,即创建下拉菜单并用.json文件中的内容填充它。当我创建普通字符串数组时,它会在我按下按钮时创建下拉菜单。发现在android中调试非常困难。不知道如何添加我的logcat。尝试使用转换器将json转换为POJO类,然后从中生成一个简单数组
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>
  {
    "formules": [
            {
    "formule": "Linear Motion",

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

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

},
{
  "formule": "Force",

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

},

]
}