【问题标题】:Exception in getting data into Viewpager from JSON从 JSON 获取数据到 Viewpager 的异常
【发布时间】:2014-05-02 12:13:19
【问题描述】:

我正在开发一个 Android 应用程序,它需要 从 json 获取数据项到 ViewPager

为此我使用了以下代码:

    public class GalleryUrlActivity extends Activity {

        private GalleryViewPager mViewPager;
        String anim_id,album_id,anim_name,anim_thumb,anim_url;
        ArrayList<HashMap<String, String>> albumList;
        int global_position=0; 
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

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

            new AsycLove().execute();
        }

        class AsycLove extends AsyncTask<String, String, String>     
        {
            ProgressDialog progressDialog;      

            @Override
            protected void onPreExecute() 
            {
                super.onPreExecute();            
                progressDialog = new ProgressDialog(GalleryUrlActivity.this);
                progressDialog.setTitle("Loading");
                progressDialog.setMessage("Please wait");
                progressDialog.setCancelable(false);
                progressDialog.setIndeterminate(true);
                progressDialog.show();
            }

            @Override
            protected String doInBackground(String... aurl)        
            {           
                try 
                {
                    HttpPost postMethod = null;

                    postMethod = new HttpPost("http://demo1.idevtechnolabs.com/smartecard/love.php");

                    BufferedReader bufferedReader = null;

                    HttpClient client = new DefaultHttpClient();
                    HttpResponse response = null;

                    response = client.execute(postMethod);
                    final int statusCode = response.getStatusLine().getStatusCode();

                    Log.v("Album ::","Response:::--->"+response.toString());
                    Log.v("Album ::","Status Code:::--->"+statusCode);

                    bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                    StringBuffer stringBuffer = new StringBuffer("");
                    String line = "";
                    String LineSeparator = System.getProperty("line.separator");
                    while ((line = bufferedReader.readLine()) != null) 
                    {
                        stringBuffer.append(line + LineSeparator); 
                    }
                    bufferedReader.close(); 

                    //-------------CONVERT DATA TO JSON---------------------------------

                    try 
                    {
                        String myjsonstring = stringBuffer.toString();

                        JSONArray jsonArray = new JSONArray(myjsonstring);

                        JSONObject jsonObj = null;

                        albumList.clear();

                        jsonObj = jsonArray.getJSONObject(0);   


                        for(int i=0; i<jsonArray.length();i++)
                        {
                                jsonObj = jsonArray.getJSONObject(i);                           

                                anim_id = jsonObj.getString("animation_id");      
                                album_id = jsonObj.getString("album_id");
                                anim_name = jsonObj.getString("animation_name");      
                                anim_thumb= jsonObj.getString("animation_thumb");
                                anim_url = jsonObj.getString("animation_url");

                                anim_url=anim_url.replaceAll("\"","");


                                Log.v("Anim URL","Anim URL::"+anim_url);
                                Log.v("Anim Name","Anim Name::"+anim_name);

                                HashMap<String, String> tmp_album = new HashMap<String, String>();
                                tmp_album.put("anim_id", anim_id);
                                tmp_album.put("anim_thumb", anim_thumb);
                                tmp_album.put("anim_url",anim_url);

                                albumList.add(tmp_album);
                                Log.v("Animation URL Position","Animation::"+global_position+"::"+anim_url);

                        }

                    } 
                    catch (Exception e) 
                    {
                        Log.v("Home ::","Call JSON Exception in get Album in List--->"+e.toString());
                        e.printStackTrace();
                    }
                } 
                catch (IOException e) 
                {
                    Log.v("Exception: Get get Album in List","Name-"+e.toString());
                    e.printStackTrace();
                }

                return "0";
            }

            @Override
            protected void onPostExecute(String code) 
            {   
                Toast.makeText(getApplicationContext(), "Image URL Call Successfully", Toast.LENGTH_LONG).show();
                Log.v("Album","Album List::"+albumList);

                String urls[] = null;
                for(int p=0;p<=albumList.size();p++)
                {
                    urls[p]=albumList.get(p).get("anim_thumb");
                }

                List<String> items = new ArrayList<String>();
                Collections.addAll(items, urls);

                UrlPagerAdapter pagerAdapter = new UrlPagerAdapter(getApplicationContext(), items);
                pagerAdapter.setOnItemChangeListener(new OnItemChangeListener()
                {
                    @Override
                    public void onItemChange(int currentPosition)
                    {
                        Toast.makeText(GalleryUrlActivity.this, "Current item is " + currentPosition, Toast.LENGTH_SHORT).show();
                    }
                });

                mViewPager = (GalleryViewPager)findViewById(R.id.viewer);
                mViewPager.setOffscreenPageLimit(3);
                mViewPager.setAdapter(pagerAdapter);

                progressDialog.dismiss();
                progressDialog = null;

            }
        }
    }

我收到以下错误:

    FATAL EXCEPTION: main
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
    at java.util.ArrayList.get(ArrayList.java:304)
    at ru.truba.touchgallery.GalleryUrlActivity$AsycLove.onPostExecute(GalleryUrlActivity.java:176)
    at ru.truba.touchgallery.GalleryUrlActivity$AsycLove.onPostExecute(GalleryUrlActivity.java:1)
    at android.os.AsyncTask.finish(AsyncTask.java:631)
    at android.os.AsyncTask.access$600(AsyncTask.java:177)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5371)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)

谁能告诉我为什么会这样?

谢谢

【问题讨论】:

  • 我想你忘了初始化albumList
  • @PoojaRoy albumList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;(); 在哪里?
  • 好的,我已经初始化了。但现在我得到了 Arry Index out of bound 异常
  • 在使用albumList之前检查条件if(albumList.size()&gt;0)

标签: android exception nullpointerexception android-viewpager


【解决方案1】:

你没有初始化你的albumList。您刚刚为此声明了一个变量。

  ArrayList<HashMap<String, String>> albumList;

现在初始化onCreate()方法。

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

【讨论】:

  • items arraylist 你没有添加任何东西。它有什么用?
  • 确实我从 JSON 获取数据,它有 5 个元素
【解决方案2】:

试试这个方法,希望对你有帮助...

albumList.clear(); 替换为

if(albumList!=null) {
  albumList.clear();
}else {
  albumList = new ArrayList<HashMap<String, String>>();
}

替换此代码:

String urls[] = null;
for(int p=0;p<=albumList.size();p++){
   urls[p]=albumList.get(p).get("anim_thumb");
}

使用此代码

String urls[] = new String[albumList.size()];
for(int p=0;p<albumList.size();p++){
   urls[p]=albumList.get(p).get("anim_thumb");
}

【讨论】:

  • Acctully 再次尝试我得到空指针异常
  • @PoojaRoy 我们怎么知道你在哪里得到NPE
  • Unable to resolve host "demo1.idevtechnolabs.com" 是什么意思:No address associated with hostname?我在从 json 获取数据时遇到的异常
【解决方案3】:

我想你忘记像

一样声明字符串数组

String[] urls = new String[albumList.size()];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多