0

我正在讓我的文本框中的JSON我試圖把這些數據在微調,但無法這樣做。以下是我的主要活動課,我正在使用Volley。如何將Json數據放入spinners的URL中?

public class Mainactivity extends Activity { 
     private String urlJsonArry = "https://www.abc.json"; 
     private static String TAG = MainActivity.class.getSimpleName(); 
     private Button btnMakeArrayRequest; 

     // Progress dialog 
     private ProgressDialog pDialog; 

     private TextView txtResponse,txtResponse2,txtResponse3,txtResponse4; 

     // temporary string to show the parsed response 
     private String jsonResponse, jsonResponse2, jsonResponse3, jsonResponse4; 
     Spinner spinner; 
     ArrayAdapter<String> adapter; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.spinners); 

      spinner= (Spinner) findViewById(R.id.spinner); 




      btnMakeArrayRequest = (Button) findViewById(R.id.btnArrayRequest); 
      txtResponse = (TextView) findViewById(R.id.txtResponse); 
      txtResponse2 = (TextView) findViewById(R.id.txtResponse2); 
      txtResponse3 = (TextView) findViewById(R.id.txtResponse3); 
      // txtResponse4 = (TextView) findViewById(R.id.txtResponse4); 


      pDialog = new ProgressDialog(this); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 

      btnMakeArrayRequest.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // making json array request 
        makeJsonArrayRequest(); 
       } 
      }); 

     } 



     private void makeJsonArrayRequest() { 

     showpDialog(); 
     JsonObjectRequest req = new JsonObjectRequest(urlJsonArry, 

       new Response.Listener<JSONObject>() { 

        @Override 
        public void onResponse(JSONObject response) { 
         Log.d(TAG, response.toString()); 

         try { 

          JSONArray array = response.getJSONArray("results"); 
          // Parsing json array response 
          // loop through each json object 
          jsonResponse = ""; 
          for (int i = 0; i < array.length(); i++) { 

           JSONObject person = (JSONObject) array 
             .get(i); 

           System.out.println(person.toString()); 

           String syllabus = person.getString("grade"); 
           String grade = person.getString("grade"); 
           String subject = person.getString("subject"); 
           jsonResponse += "Board: " + syllabus + "\n\n"; 
           jsonResponse2 += "Class: " + grade + "\n\n"; 
           jsonResponse3 += "Subject: " + subject + "\n\n"; 
           // jsonResponse4 += "ID: " + id + "\n\n"; 

//Getting Compile time error here 

adapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,array); 
           adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
           spinner.setAdapter(adapter);} 



          txtResponse.setText(jsonResponse); 



          txtResponse2.setText(jsonResponse2); 
          txtResponse3.setText(jsonResponse3); 
          //txtResponse4.setText(jsonResponse4); 


         } catch (JSONException e) { 
          e.printStackTrace(); 
          Toast.makeText(getApplicationContext(), 
            "Error: " + e.getMessage(), 
            Toast.LENGTH_LONG).show(); 
         } 

         hidepDialog(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       Toast.makeText(getApplicationContext(), 
         error.getMessage(), Toast.LENGTH_SHORT).show(); 
       hidepDialog(); 
      } 
      }); 

回答

0

您需要使用活動場景this是不活動的情況下嘗試這樣

adapter= new ArrayAdapter<String>(Mainactivity.this, android.R.layout.simple_spinner_item, array); 

編輯:

更改您的陣列格式。例如,在您的微調你要展示的主題所以做以下

String[] mySubject = new String[array.length()]; 
for (int i = 0; i < array.length(); i++) { 

           JSONObject person = (JSONObject) array 
             .get(i); 

           System.out.println(person.toString()); 

           String syllabus = person.getString("grade"); 
           String grade = person.getString("grade"); 
           String subject = person.getString("subject"); 
           jsonResponse += "Board: " + syllabus + "\n\n"; 
           jsonResponse2 += "Class: " + grade + "\n\n"; 
           jsonResponse3 += "Subject: " + subject + "\n\n"; 
           // jsonResponse4 += "ID: " + id + "\n\n"; 

           mySubject[i] = subject; 

} 


adapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mySubject); 
           adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
           spinner.setAdapter(adapter); 

注: 你也需要移動你的一套適配器外部的for循環。

+0

我做了你提到卻又面臨的問題。我提到過,但又遇到了問題。像這樣的事情正在發生adapter = new ArrayAdapter (MainActivity.this,android.R.layout.simple_spinner_item,(List )array); –

+0

是你的數組格式也是錯誤的。你不能使用你需要將它轉換成數組的JSONArray。 – Amsheer

+0

你需要在spinner中添加哪個字段?教學大綱或等級或科目? – Amsheer

0

您正在將適配器填充到JsonObjectRequest回調的內部類中,所以這指的是匿名內部類(new Response.Listener<JSONObject>())。爲了解決這個問題,您可以更改行:

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

adapter= new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item,array); 
+0

我已經提到了,但又遇到了問題。 –

相關問題