2017-03-16 114 views
0

我有這個類(TodosOsPaises),我從獲取數據,我想在ListView中顯示來自JSON的圖像,以便使用自定義適配器(MyAdapter )和它。問題是我不能在MyAdapter類訪問 「URL_IMAGEM」如何將JSON值傳遞給另一個類

TodosOsPaises類:

public class TodosOsPaises extends AppCompatActivity{ 
    private String TAG = TodosOsPaises.class.getSimpleName(); 
    private ProgressDialog pDialog; 
    private ListView lv; 
    private static String url = "http://**********/api/continent/any/country/all?id=siF1uXXEsltXOi5CWlSIzy7EABlnE5iF33bnNmfAHJiYXYNmjY"; 
    ArrayList<HashMap<String, String>> listaPaises; 
    public String URL_IMAGEM; 
    String Designacao; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_todos_os_paises); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setTitle("Países"); 
     listaPaises = new ArrayList<>(); 
     lv = (ListView) findViewById(R.id.list); 
     new GetPaises().execute(); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       finish(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     menu.findItem(R.id.spinner_cat).setVisible(false); 
     menu.findItem(R.id.spinner_pais).setVisible(false); 
     return true; 
    } 

    private class GetPaises extends AsyncTask<Void, Void, Void> implements Serializable { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(TodosOsPaises.this); 
      pDialog.setMessage("Aguarde..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      HttpHandler sh = new HttpHandler(); 
      final String jsonStr = sh.makeServiceCall(url); 
      Log.e(TAG, "Response from URL: " + jsonStr); 
      if (jsonStr != null) { 
       try { 
        JSONArray array = new JSONArray(jsonStr); 
        for (int i = 0; i < array.length(); i++) { 
         JSONObject jsonObject = array.getJSONObject(i); 
         JSONArray paises = jsonObject.optJSONArray("paises"); 

         if (paises != null) { 
          for (int j = 0; j < paises.length(); j++) { 
           JSONObject jsonObject1 = paises.getJSONObject(j); 

           String K_PAIS = jsonObject1.getString("K_PAIS"); 
           Designacao = jsonObject1.getString("Designacao"); 
           //String URL_IMAGE_SMALL = jsonObject1.getString("URL_IMAGE_SMALL"); 
           URL_IMAGEM = ("http://**********t" + jsonObject1.getString("URL_IMAGE_SMALL")).toString(); 
           String Coord_LAT = jsonObject1.getString("Coord_LAT"); 
           String Coord_LONG = jsonObject1.getString("Coord_LONG"); 
           String Coord_Zoom = jsonObject1.getString("Coord_Zoom"); 


           HashMap<String, String> pais = new HashMap<>(); 

           pais.put("K_PAIS", K_PAIS); 
           pais.put("Designacao", Designacao); 
           //pais.put("URL_IMAGE_SMALL", URL_IMAGE_SMALL); 
           pais.put("URL_IMAGEM", URL_IMAGEM); 
           pais.put("Coord_LAT", Coord_LAT); 
           pais.put("Coord_LONG", Coord_LONG); 
           pais.put("Coord_Zoom", Coord_Zoom); 

           listaPaises.add(pais); 
          } 
         } 
        } 
       } catch (final JSONException e) { 
        Log.e(TAG, "Json parsing error: " + e.getMessage()); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), "Json parsin error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
         } 
        }); 
       } 

      } else { 
       Log.e(TAG, "Couldn't get json from server."); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), "Couldn't get json from server. Check LogCat for possible errpr!", Toast.LENGTH_LONG).show(); 
        } 
       }); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      if (pDialog.isShowing()) { 
       pDialog.dismiss(); 
      } 


      ListView list= (ListView) (TodosOsPaises.this).findViewById(R.id.list); 
      ListAdapter adapter = 
        new MyAdapter(
          (TodosOsPaises.this), 
          listaPaises, 
          R.layout.list_item, 
          new String[]{Designacao}, 
          new int[]{R.id.Designacao}); 
      list.setAdapter(adapter); 





      /*ListAdapter adapter = new SimpleAdapter(
        TodosOsPaises.this, 
        listaPaises, 
        R.layout.list_item, 
        new String[]{"Designacao", }, 
        new int[]{R.id.Designacao, }); 
      lv.setAdapter(adapter); 
      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> pare, View view, int position, long id) { 
        Intent intent = new Intent(TodosOsPaises.this, MapsActivity.class); 
        intent.putExtra("data", listaPaises.get(position)); 
        startActivity(intent); 
       } 
      });*/ 
      Collections.sort(listaPaises, new Comparator<HashMap<String, String>>() { 
       @Override 
       public int compare(HashMap<String, String> first, HashMap<String, String> second) { 
        String firstValue = first.get("Designacao"); 
        String secondValue = second.get("Designacao"); 
        return firstValue.compareTo(secondValue); 
       } 
      }); 
     } 
    } 
} 

MyAdapter類:

public class MyAdapter extends SimpleAdapter { 
    public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) { 
     super(context, data, resource, from, to); 
    } 

    public View getView(int position, View convertView, ViewGroup parent){ 
     View v = super.getView(position, convertView, parent); 

     ImageView img = (ImageView) v.getTag(); 
     if (img == null){ 
      img = (ImageView) v.findViewById(R.id.imageView7); 
      v.setTag(img); 
     } 


     String imageFlag = (String) ((Map)getItem(position)).get(URL_IMAGEM); <<-- here it says "Cannot resolve symbol 'URL_IMAGEM'" 
     Picasso.with(v.getContext()).load(imageFlag).into(img); 

     return v; 
    } 
} 

出現這種情況,是因爲我沒有URL_IMAGEM定義,我想我需要從TodosOsPaises中獲得它。 我在Android的初學者,所以我很抱歉,如果我犯了一些錯誤

回答

2
String imageFlag = (String) ((Map)getItem(position)).get("URL_IMAGEM"); 

那是因爲他們是在你的adapter.You那個名字沒有字符串varible必須提供字符串名稱itseld

+0

非常感謝!! – alb

+0

不客氣 –