2017-01-04 11 views
2

SearchFormFragmentクラスには、そこにスピナーがあります.Jsonからデータを取得したいのですが、どのようにデータをスピナーで取得できますか? そして、スピナーでjsonからデータを設定する別の方法は何ですか?jsonからスピナーにデータを取得するにはどうすればよいですか?

FormType.java

//POJO class 
public Class FormType { 

private String fid; 
private String formType; 

public String getFid() { 
    return fid; 
} 

public void setFid(String fid) { 
    this.fid = fid; 
} 

public String getFormType() { 
    return formType; 
} 

public void setFormType(String formType) { 
    this.formType = formType; 
} 
} 

SearchFormFragment.java

import android.app.DownloadManager; 
import android.app.LoaderManager; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.LinearLayout; 
import android.widget.Spinner; 
import android.widget.Toast; 

import com.android.volley.ApplicationController; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.error.AuthFailureError; 
import com.android.volley.error.VolleyError; 
import com.android.volley.request.StringRequest; 
import com.example.pc.formfillingapp.R; 
import com.google.gson.JsonObject; 

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

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import MainPages.Utils.Constants; 
import MainPages.Utils.TinyDB; 

/** 
* Created by PC on 29-12-2016. 
*/ 

public class SearchFormFragment extends Fragment implements View.OnClickListener { 

    ArrayList<FormType> formTypes = new ArrayList<FormType>(); 
    ArrayList<String> formName = new ArrayList<String>(); 

    Spinner spinner1; 
    Toolbar toolbar; 
    View view; 
    FragmentActivity fragmentActivity; 
    AppCompatActivity appCompatActivity; 
    TinyDB tinyDB; 

    public SearchFormFragment() { 

    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.spinner, container, false); 
     fragmentActivity = getActivity(); 
     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     Log.v("onActivtyCreated", "inside it"); 
     super.onActivityCreated(savedInstanceState); 
     tinyDB = new TinyDB(getActivity()); 

     //ToolBar for {NavigationView} 
     toolbar = (Toolbar) view.findViewById(R.id.toolbar); 

     appCompatActivity = (AppCompatActivity) getActivity(); 
     appCompatActivity.setSupportActionBar(toolbar); 
     appCompatActivity.getSupportActionBar().setTitle(R.string.app_name); 

     spinner1 = (Spinner) view.findViewById(R.id.spinner_category_view1); 

     getDataFromApi(); 
     Log.v("onAcitvityCreated", "endof it"); 
    } 

    public void getDataFromApi() { 
     MainActivity.showLoader(getActivity()); 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, 
       "JSON URL", new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       Log.e("Response", "response from type " + response); 
       try { 
        JSONObject jsonObject = new JSONObject(response); 

        String message = jsonObject.getString("message"); 
        JSONObject list = jsonObject.getJSONObject("list"); 
        boolean status = jsonObject.getBoolean("status"); 
        JSONArray data = list.getJSONArray("data"); 

        if (status == true){ 
         if (data != null) { 
          for (int i = 0; i < data.length(); i++) { 

           FormType form = new FormType(); 

           JSONObject currentData = data.getJSONObject(i); 
           String fid = currentData.getString("fid"); 
           String formType = currentData.getString("form_type"); 

           form.setFid(fid); 
           form.setFormType(formType); 
           Log.e("FormType","type...."); 
           formTypes.add(form); 
           formName.add(formType); 
           Log.e("Response","adding data..."); 
          } 
          MainActivity.hideLoader(); 
         } 
        } 
        spinner1.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, formName)); 
        Log.e("Response","adding dataadapter"); 
        MainActivity.hideLoader(); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        Log.e("Response","exception"); 
        MainActivity.hideLoader(); 
       } 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       try { 
        String errorJson = String.valueOf(error.networkResponse); 
        JSONObject jsonObject = new JSONObject(errorJson); 
        String errorMessage = jsonObject.getString("error"); 

        Toast.makeText(getContext(),errorMessage , Toast.LENGTH_LONG).show(); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        Toast.makeText(getContext(), getResources().getString(R.string.exception) , Toast.LENGTH_LONG).show(); 
       } 
       MainActivity.hideLoader(); 
      } 
     }){ 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       return params; 
      } 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> params = new HashMap<String, String>(); 
       return params; 
      } 
     }; 
     ApplicationController.getInstance().addToRequestQueue(stringRequest); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onClick(View view) { 
     Log.v("onClick", "inside"); 

     Log.v("onClick", "endof it"); 
    } 
} 

spinner.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/spinner_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <include 
     layout="@layout/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:padding="@dimen/activity_horizontal_margin"> 

     <TextView 
      android:id="@+id/text_view1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="@dimen/simple_value" 
      android:layout_marginRight="@dimen/activity_horizontal_margin" 
      android:text="@string/spinner_category_type" /> 

     <Spinner 
      android:id="@+id/spinner_category_view1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="@dimen/simple_value" /> 

    </LinearLayout> 

</LinearLayout> 

答えて

0

あなたはJSONのデータを得たとき、あなたはどのArrayListの中で、このデータを配置する必要があり。このarraylistをアダプタに割り当てます。そして、このようなあなたのスピナーでこのアダプタを割り当てる。..

spinner.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, your_arraylist));

+0

私は、JSONのデータを得たが、私がそこにこのコードを使用しspinner.Evenに設定されていません。 – ankit682

+0

あなたのformName arraylistは空だと思います。 ArrayListにデータを追加した後にこのコードを入力してください。 System.out.println( "あなたのarraylist" + forName);出力を参照してください... –

+0

私はこのSystem.out.println( "あなたのarraylist" + forName)を使用しました。 jsonからデータを取得しましたが、スピナーに設定することはできません...... – ankit682

関連する問題