Я пытаюсь понять, как загрузить контент с сервера перед запуском пользовательского интерфейса и настройкой адаптера ViewPager. На моем сервере есть файл JSON, и приложение его правильно читает, но я не могу обновить ViewPager.

В идеале я хочу создать диалоговое окно, в котором говорится что-то вроде «Подождите, мы проверяем, есть ли новое содержимое» с циклической загрузкой (просто чтобы показать, что оно работает), и если да - загрузить его и сделать контент свежим, а если не использовать последний контент.

Похоже, прямо сейчас. Работает как есть - где взять?

public class MainActivity extends Activity {

MediaPlayer mp;
ViewPager viewPager;
PagerAdapter adapter;
//int[] sounds;
int[] g;
String[] title;
int[] description;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewpager_main);

    // Generate data

    title = new String[] { "A1", "A2", "A3","A4" };

    description = new int[] { R.string.a1, R.string.a2, R.string.a3, R.string.a4 };

    gun = new int[] {R.drawable.obr4,R.drawable.obr4,R.drawable.obr4,R.drawable.obr4};

    // Locate the ViewPager in viewpager_main.xml
    viewPager = (ViewPager) findViewById(R.id.pager);
    // Pass results to ViewPagerAdapter Class
    adapter = new ViewPagerAdapter(MainActivity.this, g, title,
            description);
    // Binds the Adapter to the ViewPager
    viewPager.setAdapter(adapter);

    if (VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        viewPager.setPageTransformer(true, new DepthPageTransformer());
    }



    new GetUpdate().execute();
}

class GetUpdate extends AsyncTask<Void, Void, Void>{

    JSONObject jobj = null;
    @Override
    protected Void doInBackground(Void... params) {             

        //JSON
        JSONParser jparser = new JSONParser();
        JSONObject data = jparser.getJSONFromUrl("http://myserver.com/file.json");                      

        String title2 = "";

        try {
            jobj = data.getJSONObject("party2");                
            title2 = jobj.getString("title");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //title = new String[] { title2,title2,title2,title2}; <- commented 'cause doesn't work

        return null;
    }

}
0
jean d'arme 14 Дек 2014 в 17:59

2 ответа

Лучший ответ

После получения нового JSON просто обновите список источников адаптера и выполните notifyDataSetChanged () для объекта адаптера, как показано ниже.

public class MainActivity extends Activity {

MediaPlayer mp;
ViewPager viewPager;
PagerAdapter adapter;
//int[] sounds;
int[] g;
String[] title;
int[] description;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewpager_main);

    // Generate data

    title = new String[] { "A1", "A2", "A3","A4" };

    description = new int[] { R.string.a1, R.string.a2, R.string.a3, R.string.a4 };

    gun = new int[] {R.drawable.obr4,R.drawable.obr4,R.drawable.obr4,R.drawable.obr4};

    // Locate the ViewPager in viewpager_main.xml
    viewPager = (ViewPager) findViewById(R.id.pager);
    // Pass results to ViewPagerAdapter Class
    adapter = new ViewPagerAdapter(MainActivity.this, g, title,
            description);
    // Binds the Adapter to the ViewPager
    viewPager.setAdapter(adapter);

    if (VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        viewPager.setPageTransformer(true, new DepthPageTransformer());
    }



    new GetUpdate().execute();
}

class GetUpdate extends AsyncTask<Void, Void, Void>{

    JSONObject jobj = null;
    @Override
    protected Void doInBackground(Void... params) {             

        //JSON
        JSONParser jparser = new JSONParser();
        JSONObject data = jparser.getJSONFromUrl("http://myserver.com/file.json");                      

        String title2 = "";

        try {
            jobj = data.getJSONObject("party2");                
            title2 = jobj.getString("title");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // Change titles to ArrayList for better usage.
        title[4] = title2;
        adapter.notifyDataSetChanged();

        return null;
    }

}
1
Bharath Mg 14 Дек 2014 в 15:07

Вы можете переопределить метод onPostExecute () AsyncTask, чтобы поместить туда свою логику обновления

0
Patrick Chan 14 Дек 2014 в 15:08