2015-09-28 30 views
0

我從http服務器獲取數據,我能夠顯示json索引的最後一個值,但是,我無法顯示所有的值我的JSON數組在viewpager中。請驗證我的代碼並給我一個解決方案。 在此先感謝android viewpager顯示Android中數組大小的索引中的最後一個值

package com.example.vasundharaapp; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Timer; 
import java.util.TimerTask; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import com.squareup.picasso.Picasso; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

@SuppressWarnings("deprecation") 
public class MainActivity extends ActionBarActivity { 
    static final int NUM_ITEMS = 8; 
     AdapterTask adapter; 
     ViewPager viewPager; 
     ProgressDialog progressDialog; 
     List<Channels> channelData; 
     String URl="http://172.17.22.21:925/api/homepage/gethomescroll"; 
     JSONObject json; 
     JSONArray chanlarray; 
String artimage,articaleTitle,articaleSdec,articaldec,aricaleId,articlThumImage; 

     ImageView anubandam,yuvatharang,beauty,dheera,events,ghumaghumalu,glomer,sweethome,work; 
     String[] resul; 
     Timer timer; 
     int page = 1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     anubandam=(ImageView) findViewById(R.id.anubandam); 
     yuvatharang=(ImageView) findViewById(R.id.Yuva); 
     beauty=(ImageView) findViewById(R.id.beauty); 
     dheera=(ImageView) findViewById(R.id.dheera); 
     events=(ImageView) findViewById(R.id.events); 
     ghumaghumalu=(ImageView) findViewById(R.id.ghumagumalu); 
     glomer=(ImageView) findViewById(R.id.glamor); 
     sweethome=(ImageView) findViewById(R.id.sweet); 
     work=(ImageView) findViewById(R.id.work); 
     startProgressDialog(); 
     getChannels(); 
    beauty.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent i=new Intent(MainActivity.this,BeautyActivity.class); 
       startActivity(i); 
      } 
     }); 

    } 
    private void getChannels() { 

     new Thread() 
     { 

      public void run() { 
       System.out.println("running"); 
       String responce=SendRequest.GET(URl); 
       Log.d("responce", responce); 
       channelData=parseJSON(responce); 
       Message msg=new Message(); 
       msg.arg1 = 1; 
       handler.sendMessage(msg);      
      }  
     }.start(); 


    } 
    private List<Channels> parseJSON(String responce) { 
      // TODO Auto-generated method stub  
     List<Channels> chanel = new ArrayList<Channels>(); 
     try { 
       chanlarray = new JSONArray(responce); 
       for (int i = 0; i < chanlarray.length(); i++) { 
        JSONObject channelName=chanlarray.getJSONObject(i); 
        String image = channelName.getString("articlethumbimg"); 
        String title = channelName.getString("articletitle"); 
        String article=channelName.getString("articleshortdec"); 
        //channelData.add(new Channels(image, title,article)); 

       } 

      } catch (JSONException e1) { 
       e1.printStackTrace(); 
      }   
      return chanel; 
     }; 



    private final Handler handler = new Handler() { 

      public void handleMessage(Message msg) 
      { 
       stopProgressDialog(); 
       adapter = new AdapterTask(chanlarray,MainActivity.this); 
       viewPager.setAdapter(adapter); 
       pageSwitcher(4); 

      } 

     }; 


    private void startProgressDialog() { 
     progressDialog = new ProgressDialog(this); 
     progressDialog.setMessage("Please wait.."); 
     progressDialog.show(); 
    } 

    private void stopProgressDialog() { 
     if (progressDialog != null && progressDialog.isShowing()) 
      progressDialog.dismiss(); 
    } 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 

    super.onResume(); 
} 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    public void pageSwitcher(int seconds) { 
     timer = new Timer(); // At this line a new Thread will be created 
     timer.scheduleAtFixedRate(new RemindTask(), 0, seconds * 1000); // delay 
                     // in 
     // milliseconds 
    } 

     // this is an inner class... 
    class RemindTask extends TimerTask { 

     @Override 
     public void run() { 

      // As the TimerTask run on a seprate thread from UI thread we have 
      // to call runOnUiThread to do work on UI thread. 
      runOnUiThread(new Runnable() { 
       public void run() { 

        if (page > 8) { // In my case the number of pages are 5 
         viewPager.setCurrentItem(1); 
         page=1; 

        } else { 
         viewPager.setCurrentItem(page++); 
        } 
       } 
      }); 

     } 
    } 
    class AdapterTask extends PagerAdapter{ 
     Context context; 
     String redu[]; 
     JSONArray article; 
     LayoutInflater inflater; 
     private List<Channels> articlelist; 
     AdapterTask(JSONArray article, Context context) { 
      this.context = context; 
      this.article = article; 
      //this.content=content; 
     } 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return article.length(); 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      // TODO Auto-generated method stub 
      return view == ((RelativeLayout) object); 
     } 
     @Override 
     public Object instantiateItem(ViewGroup container, final int position) { 
      ImageView imgflag; 
      TextView txt,title; 

      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View itemView = inflater.inflate(R.layout.fashionzone, container, 
        false); 
      Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/eenadu.ttf"); 
      imgflag = (ImageView) itemView.findViewById(R.id.flag); 
      txt=(TextView) itemView.findViewById(R.id.atext); 
      title=(TextView) itemView.findViewById(R.id.atitle); 


      for (int j = 0; j < chanlarray.length(); j++) { 

       try { 
        JSONObject channelName = chanlarray.getJSONObject(j); 
        aricaleId=channelName.getString("articleId"); 
        articaleTitle=channelName.getString("articletitle"); 
        articaleSdec=channelName.getString("articleshortdec"); 
        artimage=channelName.getString("articleimage"); 
        articlThumImage=channelName.getString("articlethumbimg"); 
        articaldec=channelName.getString("articledec"); 
        title.setTypeface(tf); 
        txt.setTypeface(tf); 
        title.setText(articaleTitle); 
        txt.setText(articaleSdec); 
        try{ 
         Picasso.with(MainActivity.this).load(articlThumImage).into(imgflag); 
         }catch(Exception e) 
         { 
          e.printStackTrace(); 
         } 
       } catch (JSONException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 

} 

      ((ViewPager) container).addView(itemView); 
      imgflag.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent i=new Intent(MainActivity.this,DetailsActivity.class); 
        //Bitmap bmp = flag[position]; 
        i.putExtra("image", artimage); 
        i.putExtra("txt",articaldec); 
        startActivity(i); 
       } 
      }); 

      txt.setOnClickListener(new OnClickListener() {    
       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent i=new Intent(MainActivity.this,DetailsActivity.class); 
        //Bitmap bmp = flag[position]; 
        i.putExtra("image", artimage); 
        i.putExtra("txt",articaldec); 
        startActivity(i); 
       } 
      }); 

      return itemView; 
     } 
      @Override 
      public void destroyItem(View container, int position, Object object) { 
       ((ViewPager) container).removeView((View) object); 
      } 


    } 

    public class Channels { 

     private String image; 
     private String title; 
     private String desc; 

    } 

} 

回答

1

我強烈建議你避免解析JSON成instantiateItemAdapter應該會收到Collection的項目,通常被稱爲像數據集,並從那些膨脹的意見。這樣你就必須支付解析時間,延遲你的視圖的繪製。要解決您的問題,您必須從instantiateItem中刪除for循環。 instantiateItem被稱爲getCount次,並且您必須使用參數位置來獲取要從json中表示的項目。替換for循環與

JSONObject channelName = article.getJSONObject(positon); 
+0

謝謝你的工作很好..但通過意圖我發送特定文章到另一個活動。當我點擊一篇文章,顯示該活動中的另一篇文章時,我的代碼是這樣的 –

+0

((ViewPager)容器).addView(itemView); \t \t \t imgflag.setOnClickListener(新OnClickListener(){ \t \t \t \t \t \t \t \t @覆蓋 \t \t \t \t公共無效的onClick(視圖v){ \t \t \t \t \t // TODO自動生成方法存根 \t \t \t \t \t Intent i = new Intent(MainActivity.this,DetailsActivity.class); \t \t \t \t \t //位圖bmp = flag [position]; \t \t \t \t \t i.putExtra(「image」,artimage); \t \t \t \t \t i.putExtra(「txt」,articaldec); \t \t \t \t \t startActivity(i); \t \t \t \t} \t \t \t}); \t \t \t \t \t \t \t \t \t回報ItemView控件; –

相關問題