Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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 - Fatal编程技术网

Android 使用JSON填充微调器,即使没有错误,也不会显示任何内容

Android 使用JSON填充微调器,即使没有错误,也不会显示任何内容,android,json,Android,Json,我认为我面临的问题是,ui在从后端获取数据之前先绘制我的布局图,它是旋转器。。。所以我需要先阻止它并等待我的数据,但我不知道怎么做 从后端检索到的json数据如下所示 [ { "id": 3, "nom": "xxxx", "etat": 0 } ] // URL String URL= AppConfig.URL_GetFolders; Spinner spinner; ArrayList<String> Folde

我认为我面临的问题是,ui在从后端获取数据之前先绘制我的布局图,它是旋转器。。。所以我需要先阻止它并等待我的数据,但我不知道怎么做 从后端检索到的json数据如下所示

[
    {
        "id": 3,
        "nom": "xxxx",
        "etat": 0
    }
]
// URL
String URL= AppConfig.URL_GetFolders;
Spinner spinner;
ArrayList<String> Folders;

NavigationView navigationView;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.folder_activity);
    init(savedInstanceState);

    // declaring spinner refs
    Folders=new ArrayList<>();
    spinner=(Spinner)findViewById(R.id.folder_Name);

    // Spinner section

    loadSpinnerFolders(URL);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String folder =   spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString();
            Toast.makeText(getApplicationContext(),folder,Toast.LENGTH_LONG).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            // DO Nothing here
        }
    });


}
 private void loadSpinnerFolders (String url) {
        RequestQueue requestQueue=Volley.newRequestQueue(getApplicationContext());
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try{
                    JSONObject jsonObject = new JSONObject(response);
                        JSONArray jsonArray=jsonObject.getJSONArray("data");
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                            String dossier = jsonObject1.getString("nom");
                            Folders.add(dossier);
                        }

                    spinner.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, Folders));
                }catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        int socketTimeout = 30000;
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        stringRequest.setRetryPolicy(policy);
        requestQueue.add(stringRequest);
    }
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_activity_DrawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<!-- The main content view -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <FrameLayout
        android:id="@+id/main_activity_content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <Spinner
            android:id="@+id/folder_Name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="20dp"
            android:paddingBottom="20dp"
            android:paddingEnd="20dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingStart="20dp"
            android:paddingTop="20dp" />
    </FrameLayout>

</LinearLayout>


</android.support.v4.widget.DrawerLayout>
我正在尝试使用从后端获得的JSON数据填充一个微调器。即使我没有得到任何错误,但仍然没有得到我想要的结果

我的课是这样的,

[
    {
        "id": 3,
        "nom": "xxxx",
        "etat": 0
    }
]
// URL
String URL= AppConfig.URL_GetFolders;
Spinner spinner;
ArrayList<String> Folders;

NavigationView navigationView;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.folder_activity);
    init(savedInstanceState);

    // declaring spinner refs
    Folders=new ArrayList<>();
    spinner=(Spinner)findViewById(R.id.folder_Name);

    // Spinner section

    loadSpinnerFolders(URL);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String folder =   spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString();
            Toast.makeText(getApplicationContext(),folder,Toast.LENGTH_LONG).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            // DO Nothing here
        }
    });


}
 private void loadSpinnerFolders (String url) {
        RequestQueue requestQueue=Volley.newRequestQueue(getApplicationContext());
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try{
                    JSONObject jsonObject = new JSONObject(response);
                        JSONArray jsonArray=jsonObject.getJSONArray("data");
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                            String dossier = jsonObject1.getString("nom");
                            Folders.add(dossier);
                        }

                    spinner.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, Folders));
                }catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        int socketTimeout = 30000;
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        stringRequest.setRetryPolicy(policy);
        requestQueue.add(stringRequest);
    }
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_activity_DrawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<!-- The main content view -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <FrameLayout
        android:id="@+id/main_activity_content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <Spinner
            android:id="@+id/folder_Name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="20dp"
            android:paddingBottom="20dp"
            android:paddingEnd="20dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingStart="20dp"
            android:paddingTop="20dp" />
    </FrameLayout>

</LinearLayout>


</android.support.v4.widget.DrawerLayout>
//URL
字符串URL=AppConfig.URL\u GetFolders;
纺纱机;
ArrayList文件夹;
导航视图导航视图;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.folder_活动);
初始化(savedInstanceState);
//声明微调器引用
Folders=newarraylist();
微调器=(微调器)findViewById(R.id.folder\u Name);
//旋转部分
加载SpinnerFolders(URL);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
String folder=spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString();
Toast.makeText(getApplicationContext(),文件夹,Toast.LENGTH_LONG.show();
}
@凌驾
未选择公共无效(AdapterView AdapterView){
//在这里什么也不做
}
});
}
我的微调器函数是这样的

[
    {
        "id": 3,
        "nom": "xxxx",
        "etat": 0
    }
]
// URL
String URL= AppConfig.URL_GetFolders;
Spinner spinner;
ArrayList<String> Folders;

NavigationView navigationView;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.folder_activity);
    init(savedInstanceState);

    // declaring spinner refs
    Folders=new ArrayList<>();
    spinner=(Spinner)findViewById(R.id.folder_Name);

    // Spinner section

    loadSpinnerFolders(URL);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String folder =   spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString();
            Toast.makeText(getApplicationContext(),folder,Toast.LENGTH_LONG).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            // DO Nothing here
        }
    });


}
 private void loadSpinnerFolders (String url) {
        RequestQueue requestQueue=Volley.newRequestQueue(getApplicationContext());
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try{
                    JSONObject jsonObject = new JSONObject(response);
                        JSONArray jsonArray=jsonObject.getJSONArray("data");
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                            String dossier = jsonObject1.getString("nom");
                            Folders.add(dossier);
                        }

                    spinner.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, Folders));
                }catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        int socketTimeout = 30000;
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        stringRequest.setRetryPolicy(policy);
        requestQueue.add(stringRequest);
    }
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_activity_DrawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<!-- The main content view -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar" />

    <FrameLayout
        android:id="@+id/main_activity_content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <Spinner
            android:id="@+id/folder_Name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="20dp"
            android:paddingBottom="20dp"
            android:paddingEnd="20dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingStart="20dp"
            android:paddingTop="20dp" />
    </FrameLayout>

</LinearLayout>


</android.support.v4.widget.DrawerLayout>
private void loadSpinnerFolders(字符串url){
RequestQueue RequestQueue=Volley.newRequestQueue(getApplicationContext());
StringRequest StringRequest=新建StringRequest(Request.Method.GET,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject JSONObject=新JSONObject(响应);
JSONArray JSONArray=jsonObject.getJSONArray(“数据”);
对于(inti=0;iHandler…)

这将等待5秒钟。您可以通过编辑5000进行调整

1000=1秒

  Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                // yourMethod();
            }
        }, 5000);   
您还可以执行异步任务

private class MethodNameHere extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //THINGS TO DO BEFORE THE CODE STARTS (create a new List)

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            //things to do because you draw the layout in post
            return null;
        }


        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            //draw the view
            }
    }
此外,如果微调器值没有更改,请不要从服务器获取它们。将它们存储在本地

这是一种使用列表并将其放入微调器的简单方法

Spinner spinner;
List<String> spinnerList;

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

    spinner = findViewById(R.id.spinner);
    spinnerList = new ArrayList<>();

    spinnerList.add("test 1");
    spinnerList.add("test 2");
    spinnerList.add("test 3");
    spinnerList.add("test 4");
    spinnerList.add("test 5");

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item, spinnerList);

    spinner.setAdapter(spinnerArrayAdapter);


}
微调器微调器;
列表喷丝头列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
微调器=findViewById(R.id.spinner);
喷丝头列表=新的ArrayList();
喷丝头列表。添加(“试验1”);
喷丝头列表。添加(“试验2”);
喷丝头列表。添加(“试验3”);
喷丝头列表。添加(“试验4”);
喷丝头列表。添加(“试验5”);
ArrayAdapter SpinnerayAdapter=新的ArrayAdapter
(这是android.R.layout.simple\u spinner\u项目,spinnerList);
spinner.setAdapter(SpinNearrayaAdapter);
}
在预执行时,创建一个新列表

现在,在您的例子中,您需要获得响应,遍历数组,并将项目添加到列表中

在波斯特…做这个

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item, spinnerList);

spinner.setAdapter(spinnerArrayAdapter); 
ArrayAdapter微调器ArrayAdapter=新的ArrayAdapter
(这是android.R.layout.simple\u spinner\u项目,spinnerList);
spinner.setAdapter(SpinNearrayaAdapter);

您能显示完整的json吗?因为您的代码会显示jsonObject.getJSONArray(“数据”)..但是没有数据阵列我很抱歉我只是编辑了它,我得到的json会调试它。应该可以工作。文件夹的大小是多少?在循环之后检查它。我面临的问题是ui在从后端获取数据之前先绘制我的布局,它是微调器…所以我需要阻止它并等待我的数据,但我没有知道如何添加处理程序。我将为代码添加一个答案。@brxnzaz检查底部的更新。不要想太多。这很容易。