2016-12-16 4 views
0

私のアプリのネットワークリクエストを処理するためにマルチスピナー& Android Volley Libraryを使用していますが、サーバーからの応答があってもスピナーが応答しません、応答がスピナーにボレーの応答から移入取得されていない、助けてください... 私のコードはAndroid SpinnerにJSONデータが設定されていませんVolley Response

StringRequest stringRequest = new StringRequest(Request.Method.GET, IP.IP+"/api/users/view_group", new com.android.volley.Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       //Toast.makeText(Room_Config.this, response, Toast.LENGTH_SHORT).show(); 
       String text=response; 
       System.out.println(response); 

       try { 
        JSONObject obj = new JSONObject(response); 
        String strMessage = (String) obj.get("message"); 
        JSONArray jarray = new JSONArray(strMessage); 
        for (int i = 0; i < jarray.length(); i++) { 
         JSONObject obj1 = jarray.getJSONObject(i); 
         //id= (int) obj1.get("group_id"); 
         list1.add((int) obj1.get("group_id")); 
         list.add((String) obj1.get("group_name")); 
         map.put((String) obj1.get("group_name"), (Integer) obj1.get("group_id"));} 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 


      } 
     }, new com.android.volley.Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       if (error instanceof TimeoutError) { 
        Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof NoConnectionError) { 
        Toast.makeText(Room_Config.this,"No Connection Found", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof ServerError) { 
        Toast.makeText(Room_Config.this,"Server Error", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof NetworkError) { 
        Toast.makeText(Room_Config.this,"Network Error", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof ParseError) { 
        Toast.makeText(Room_Config.this,"Parse Error", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
     stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
     queue.add(stringRequest); 

System.out.println("Group Name List is" + list); 
     System.out.println("\nGroup id list is---> " + list1); 
     et1 = (EditText) findViewById(R.id.et1); 
     et2 = (EditText) findViewById(R.id.et2); 
     et3 = (EditText) findViewById(R.id.et3); 

     et1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if (s.toString().length()<3) { 
        if (!validateNo()) { 
         return; 
        } 
       }else { 
        inputLayoutNo.setErrorEnabled(false); 
       } 
      } 
     }); 

et2.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if (!validateName()) { 
      return; 
     } 
    } 
}); 

et3.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if (!validateDesc()) { 
      return; 
     } 
    } 
}); 

if (list.isEmpty()){ Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show();} 


     // TreeMap<String, Boolean> items = new TreeMap<>(); 
     HashMap<String,Boolean> items=new HashMap<>(); 
     for (String item : list) { 
      items.put(item, Boolean.FALSE); 
     } 
     MultiSpinner simpleSpinner = (MultiSpinner) findViewById(R.id.room_spinner); 
     simpleSpinner.setItems(items, new MultiSpinner.MultiSpinnerListener() { 

      @Override 
      public void onItemsSelected(boolean[] selected) { 
       mylist.clear(); 
       nlist.clear(); 
       // your operation with code... 
       for (int i = 0; i < selected.length; i++) { 
        if (selected[i]) { 
         Log.i("TAG", i + " : " + list.get(i)); 
         System.out.println("Selected Item is----->" + list.get(i)); 
         mylist.add(list.get(i)); 
         System.out.println("My List is\t" + mylist); 

        } 


       } 
       for (int j = 0; j < mylist.size(); j++) { 
        objh = map.get(mylist.get(j)); 
        myIntArray = map.get(mylist.get(j)); 
        nlist.add(myIntArray); 
        System.out.println("New Id List is-------->" + nlist); 
       } 


      } 

     }); 

を下回っている。これは、私が使用しMultispinnerクラスです.....

を助けてください

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnCancelListener; 
import android.content.DialogInterface.OnMultiChoiceClickListener; 
import android.util.AttributeSet; 
import android.widget.ArrayAdapter; 

import com.rey.material.widget.Spinner; 

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

public class MultiSpinner extends Spinner implements OnMultiChoiceClickListener, OnCancelListener { 

    private List<String> items; 
    private boolean[] selected; 
    private String defaultText = "Click to Select Group"; 
    private MultiSpinnerListener listener; 

    public MultiSpinner(Context context) { 
     super(context); 
    } 

    public MultiSpinner(Context arg0, AttributeSet arg1) { 
     super(arg0, arg1); 
    } 

    public MultiSpinner(Context arg0, AttributeSet arg1, int arg2) { 
     super(arg0, arg1, arg2); 
    } 

    @Override 
    public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
     selected[which] = isChecked; 
    } 

    @Override 
    public void onCancel(DialogInterface dialog) { 
     // refresh text on spinner 
     StringBuilder spinnerBuffer = new StringBuilder(); 
     for (int i = 0; i < items.size(); i++) { 
      if (selected[i]) { 
       spinnerBuffer.append(items.get(i)); 
       spinnerBuffer.append(", "); 
      } 
     } 

     String spinnerText = ""; 
     spinnerText = spinnerBuffer.toString(); 
     if (spinnerText.length() > 2) { 
      spinnerText = spinnerText.substring(0, spinnerText.length() - 2); 
     } else { 
      spinnerText = defaultText; 
     } 

     ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), 
       R.layout.textview_for_spinner, 
       new String[]{spinnerText}); 
     setAdapter(adapter); 
     if (selected.length > 0) { 
      listener.onItemsSelected(selected); 
     } 

    } 

    @Override 
    public boolean performClick() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
     builder.setTitle(defaultText); 
     builder.setMultiChoiceItems(
       items.toArray(new CharSequence[items.size()]), selected, this); 
     builder.setPositiveButton(android.R.string.ok, 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 
     builder.setOnCancelListener(this); 
     builder.show(); 
     return true; 
    } 

    /** 
    * Sets items to this spinner. 
    * @param items A HashMap where the keys are the values to display in the spinner 
    *     and the value the initial selected state of the key. 
    * @param listener A MultiSpinnerListener. 
    */ 
    public void setItems(HashMap<String, Boolean> items, 
         MultiSpinnerListener listener) { 
     this.items = new ArrayList<>(items.keySet()); 
     this.listener = listener; 

     List<Boolean> values = new ArrayList<>(items.values()); 
     selected = new boolean[values.size()]; 
     for (int i = 0; i < items.size(); i++) { 
      selected[i] = values.get(i); 
     } 

     // all text on the spinner 
     ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), 
       R.layout.textview_for_spinner, new String[]{defaultText}); 
     setAdapter(adapter); 

     // Set Spinner Text 
     onCancel(null); 
    } 

    public interface MultiSpinnerListener { 
     void onItemsSelected(boolean[] selected); 
    } 


} 
+0

で述べたように、対応するPHPファイルは次のように何を見ていますか? –

+0

@ChrisGong PHPを使用していない、ただjava –

+0

'simpleSpinner'に' Adapter'を渡してください。 –

答えて

0

This libray

// create spinner list elements 
    ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); 
    adapter.add("Item1"); 
    adapter.add("Item2"); 
    adapter.add("Item3"); 
    adapter.add("Item4"); 
    adapter.add("Item5"); 

    // get spinner and set adapter 
    spinner = (MultiSpinner) findViewById(R.id.spinnerMulti); 
    spinner.setAdapter(adapter, false, onSelectedListener); 
0

使用このコードをあなたの問題を解決するために

StringRequest stringRequest = new StringRequest(Request.Method.GET, IP.IP+"/api/users/view_group", new com.android.volley.Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       //Toast.makeText(Room_Config.this, response, Toast.LENGTH_SHORT).show(); 
       String text=response; 
       System.out.println(response); 

       try { 
        JSONObject obj = new JSONObject(response); 
        String strMessage = (String) obj.get("message"); 
        JSONArray jarray = new JSONArray(strMessage); 
        for (int i = 0; i < jarray.length(); i++) { 
         JSONObject obj1 = jarray.getJSONObject(i); 
         //id= (int) obj1.get("group_id"); 
         list1.add((int) obj1.get("group_id")); 
         list.add((String) obj1.get("group_name")); 
         map.put((String) obj1.get("group_name"), (Integer) obj1.get("group_id"));} 
//call this method with your new data eg map 
setSpinnerData(map); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 


      } 
     }, new com.android.volley.Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       if (error instanceof TimeoutError) { 
        Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof NoConnectionError) { 
        Toast.makeText(Room_Config.this,"No Connection Found", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof ServerError) { 
        Toast.makeText(Room_Config.this,"Server Error", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof NetworkError) { 
        Toast.makeText(Room_Config.this,"Network Error", Toast.LENGTH_SHORT).show(); 
       } else if (error instanceof ParseError) { 
        Toast.makeText(Room_Config.this,"Parse Error", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
     stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
     queue.add(stringRequest); 

System.out.println("Group Name List is" + list); 
     System.out.println("\nGroup id list is---> " + list1); 
     et1 = (EditText) findViewById(R.id.et1); 
     et2 = (EditText) findViewById(R.id.et2); 
     et3 = (EditText) findViewById(R.id.et3); 

     et1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if (s.toString().length()<3) { 
        if (!validateNo()) { 
         return; 
        } 
       }else { 
        inputLayoutNo.setErrorEnabled(false); 
       } 
      } 
     }); 

et2.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if (!validateName()) { 
      return; 
     } 
    } 
}); 

et3.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if (!validateDesc()) { 
      return; 
     } 
    } 
}); 

if (list.isEmpty()){ Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show();} 


     // TreeMap<String, Boolean> items = new TreeMap<>(); 
     HashMap<String,Boolean> items=new HashMap<>(); 
     for (String item : list) { 
      items.put(item, Boolean.FALSE); 
     } 
     MultiSpinner simpleSpinner = (MultiSpinner) findViewById(R.id.room_spinner); 
     setSpinnerData(items); 

新しい方法

public void setSpinnerData(TreeMap<String, Boolean> items){ 
simpleSpinner.setItems(items, new MultiSpinner.MultiSpinnerListener() { 

      @Override 
      public void onItemsSelected(boolean[] selected) { 
       mylist.clear(); 
       nlist.clear(); 
       // your operation with code... 
       for (int i = 0; i < selected.length; i++) { 
        if (selected[i]) { 
         Log.i("TAG", i + " : " + list.get(i)); 
         System.out.println("Selected Item is----->" + list.get(i)); 
         mylist.add(list.get(i)); 
         System.out.println("My List is\t" + mylist); 

        } 


       } 
       for (int j = 0; j < mylist.size(); j++) { 
        objh = map.get(mylist.get(j)); 
        myIntArray = map.get(mylist.get(j)); 
        nlist.add(myIntArray); 
        System.out.println("New Id List is-------->" + nlist); 
       } 


      } 

     });} 
+0

私はHashMap自体を使用する必要があります..可能ですか? –

+0

はい、すべてのキーまたはmap.values()。size()を取得してアダプタのサイズを返すことができます。あなたがさらに助けを必要とする場合はお知らせください – Qamar

+0

なぜそれが返されるべきですか?マップをハッシュマップに変更する以外に、コードにどのような変更を加える必要がありますか? –

関連する問題