2015-05-26 1 views
0

я успешно получила ViewPager работает с помощью [из этого учебника: http://www.androidbegin.com/tutorial/android-viewpager-gallery-images-and-texts-tutorial/]Ошибка преобразования вида пейджер деталь к JSON

Теперь я пытаюсь преобразование данных в ViewPager до настоящего времени, извлеченного из файла JSON на Веб-сайт. Я использовал код, чтобы получить регулярный список, и он работает нормально, но проблема, которую я не могу точно определить, с адаптером ViewPager является причиной этой ошибки:

Error:(159, 31) error: constructor ViewPagerAdapter in class ViewPagerAdapter cannot be applied to given types; 
required: Context,String[],String[],String[],int[] 
found: Activity,ArrayList<HashMap<String,String>>,String,String,String,String 
reason: actual and formal argument lists differ in length 

Вот код во фрагменте:

public class WhatsHotFragment extends Fragment { 

private TextView DateView; 
private ImageView PhotoView; 
private TextView whereView; 
private TextView infoView; 

ViewPager viewPager; 
PagerAdapter adapter; 


public WhatsHotFragment() {} 



private static final String TAG_OS = "results"; 

private static final String where = "name"; 
private static final String date = "dates"; 
private static final String information = "info"; 
private static final String flag = "avatar_url"; 



ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 


private static String url = "http://celebirious.com/bey/data/style.json"; 



JSONArray android = null; 


@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 



} 



@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 



    View v = inflater.inflate(R.layout.fragment_whats_hot, null); 

    oslist = new ArrayList<HashMap<String, String>>(); 
    new JSONParse().execute(); 

    return v; 

} 

class JSONParse extends AsyncTask<String, String, JSONObject> { 
    private ProgressDialog pDialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     infoView = (TextView) getActivity().findViewById(R.id.info); 
     whereView = (TextView) getActivity().findViewById(R.id.where); 
     DateView = (TextView) getActivity().findViewById(R.id.date); 
     PhotoView = (ImageView) getActivity().findViewById(R.id.photo); 
     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Getting Data ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 

    } 

    @Override 
    protected JSONObject doInBackground(String... args) { 

     JSONParser jParser = new JSONParser(); 
     JSONObject json = jParser.getJSONFromUrl(url); 
     return json; 
    } 


    @Override 
    protected void onPostExecute(JSONObject json) { 
     pDialog.dismiss(); 
     try { 

      android = json.getJSONArray(TAG_OS); 
      for(int i = 0; i < android.length(); i++){ 
       JSONObject c = android.getJSONObject(i); 


       // Storing JSON item in a Variable 
       String infoView = c.getString(information); 
       String dateView = c.getString(date); 
       String whereView = c.getString(where); 
       String PhotoView = c.getString(flag); 


       // Adding value HashMap key => value 

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

       map.put(information, infoView); 
       map.put(date, dateView); 
       map.put(whereView, where); 
       map.put(PhotoView, flag); 


       oslist.add(map); 

       viewPager = (ViewPager) getActivity().findViewById(R.id.pager); 
       adapter = new ViewPagerAdapter(getActivity(), oslist, where, date, information, flag); 

       viewPager.setAdapter(adapter); 


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

    } 



} 





} 

И в ViewPagerAdapter, вот код:

public class ViewPagerAdapter extends PagerAdapter { 
// Declare Variables 
Context context; 
String[] where; 
String[] date; 
String[] information; 
int[] flag; 
LayoutInflater inflater; 

public ViewPagerAdapter(Context context, String[] where, String[] date, 
     String[] information, int[] flag) { 
    this.context = context; 
    this.where = where; 
    this.date = date; 
    this.information = information; 
    this.flag = flag; 
} 

@Override 
public int getCount() { 
    return where.length; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((RelativeLayout) object); 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 

    // Declare Variables 
    TextView txtrank; 
    TextView txtcountry; 
    TextView txtpopulation; 
    ImageView imgflag; 

    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View itemView = inflater.inflate(R.layout.styledeets, container, 
      false); 

    // Locate the TextViews in viewpager_item.xml 
    txtrank = (TextView) itemView.findViewById(R.id.date); 
    txtcountry = (TextView) itemView.findViewById(R.id.where); 
    txtpopulation = (TextView) itemView.findViewById(R.id.info); 

    // Capture position and set to the TextViews 
    txtrank.setText(where[position]); 
    txtcountry.setText(date[position]); 
    txtpopulation.setText(information[position]); 

    // Locate the ImageView in viewpager_item.xml 
    imgflag = (ImageView) itemView.findViewById(R.id.photo); 
    // Capture position and set to the ImageView 
    imgflag.setImageResource(flag[position]); 

    // Add viewpager_item.xml to ViewPager 
    ((ViewPager) container).addView(itemView); 

    return itemView; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    ((ViewPager) container).removeView((RelativeLayout) object); 

} 
} 

Мое предположение заключается в следующем: общественность ViewPagerAdapter (контекст Context, String [], где, String [] дата, String [] information, int [] flag) { this.context = context; this.where = где; this.date = date; this.information = информация; this.flag = флаг; }

От адаптера возникает проблема - как это можно исправить, пожалуйста?

ответ

2

Проблема заключается в том, что ваш класс ViewPagerAdapter имеет конструктор, который запрашивает контекст Context, String [], где, String [] дата, String [] информация, ИНТ [] флаг -

public ViewPagerAdapter(Context context, String[] where, String[] date, 
     String[] information, int[] flag) { 
    this.context = context; 
    this.where = where; 
    this.date = date; 
    this.information = information; 
    this.flag = flag; 
} 

Но вы давая Activity,ArrayList<HashMap<String,String>>,String,String,String,String

Вы должны изменить конструктор -

public ViewPagerAdapter(Context context, ArrayList<HashMap<String,String>> map ,String s1,String s2,String s3,String s4) { 
     ///implementation 
    } 

More.

Вы должны изменить эту строку кода, теперь в течение цикла, что означает, что вы делаете эту операцию на каждой итерации, поставить его вне forloop:

for(int i = 0; i < android.length(); i++){ 
      JSONObject c = android.getJSONObject(i); 


      // Storing JSON item in a Variable 
      String infoView = c.getString(information); 
      String dateView = c.getString(date); 
      String whereView = c.getString(where); 
      String PhotoView = c.getString(flag); 


      // Adding value HashMap key => value 

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

      map.put(information, infoView); 
      map.put(date, dateView); 
      map.put(whereView, where); 
      map.put(PhotoView, flag); 


      oslist.add(map); 

      viewPager = (ViewPager) getActivity().findViewById(R.id.pager); 
      adapter = new ViewPagerAdapter(getActivity(), oslist, where, date, information, flag); 

      viewPager.setAdapter(adapter); 


     } 

Даже больше:

AsyncTask - не используйте это, это вызовет проблемы, если активность будет потеряна до завершения операции. Проверьте «Дооснащение» и/или «Okhttp», или по крайней мере используйте AsyncTaskLoader. И для манипуляций с Json, проверьте библиотеки Gson или Jackson.

+0

Спасибо за попытку помочь мне. Ошибка все еще сохраняется :(Что вы подразумеваете под «за пределами forloop»? – HalesEnchanted

+0

«Ошибка: (27, 82) error: expected» - ответ для \t public ViewPagerAdapter (контекст контекста, ArrayList >, где, дата, информация, флаг) { – HalesEnchanted

+0

@HalesEnchanted Устанавливается - adapter = new ViewPagerAdapter (getActivity(), oslist, где, дата, информация, флаг); viewPager.setAdapter (адаптер); цикл, вытащите его на место - после вашего catch {}. Нет необходимости делать это более одного раза. –

Смежные вопросы