2016-04-02 14 views
-2

さまざまなtutsやSOの質問を見て、リモートデータベースのビューページ内に限られた結果を表示する方法を知っています。しかし、私はアプリを実行すると、私は次のエラーを取得します。私はエラーなしでブラウザを介してURLをチェックしたので、それはnullではないことがわかっているので、私は混乱しており、どこが間違っているのか分からない。 PHPコードは、結果をデータベースの最後の5行に降順で制限します。Androidのカスタムビューページでこのエラーが発生する原因は何ですか?

LogCat

プロセス:com.curtrostudios.custompagertest、PID:com.curtrostudios.custompagertest.MainActivity $ 2.onResponse(MainActivity.java:59)で22057 java.lang.NullPointerExceptionが com.android.volley.toolbox.JsonRequest.deliverResponseでcom.curtrostudios.custompagertest.MainActivity $ 2.onResponse(MainActivity.java:50) (JsonRequest.java:65)で com.android.volley.ExecutorDelivery $ ResponseDeliveryRunnableで。実行(ExecutorDelivery.java:99) droid.os.Handler.handleCallback(Handler.java:733) (アンドロイド.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android。 app.ActivityThread.main(ActivityThread.java:5072) at java.lang.reflect.Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:515) at com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) at dalvik.system.NativeStart.main(ネイティブメソッド)

主な法律ivity

public class MainActivity extends AppCompatActivity { 
    private ViewPager pageView; 
    private String TAG = "Featured View"; 
    private String FEAT_URL = "http://localhost/testing/featured.php"; 
    private ArrayList<FeaturedModel> fdata; 
    private FeaturedAdapter featAdapt; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     pageView = (ViewPager)findViewById(R.id.featuredView); 

     JsonArrayRequest request = new JsonArrayRequest(FEAT_URL, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); try { 
          for(int i=0;i<response.length();i++){ 
           String pid=response.getJSONObject(i).getString("pid"); 
           String name=response.getJSONObject(i).getString("prod_name"); 
           String img = response.getJSONObject(i).getString("prod_pic"); 

           fdata.add(new FeaturedModel(pid, name, img)); 
          } 
         } catch (JSONException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         featAdapt=new FeaturedAdapter(MainActivity.this, fdata); 
         pageView.setAdapter(featAdapt); 
         //dialog.dismiss(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.d(TAG, "Error: " + error.getMessage()); 
       //dialog.dismiss(); 
      } 
     }); 

     VolleyController.getInstance().addToRequestQueue(request, TAG); 





    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.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(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

データモデルブラウザから

public class FeaturedModel { 
    private String pid; 
    private String prod_name; 
    private String prod_pic; 

    public FeaturedModel(String pid,String prod_name,String prod_pic){ 
     this.pid=pid; 
     this.prod_name=prod_name; 
     this.prod_pic=prod_pic; 

    } 

    public String getPID(){ 
     return pid; 

    } 
    public String getName(){ 
     return prod_name; 

    } 
    public String getImageURL(){ 
     return prod_pic; 
    } 


} 

ページャアダプタ

public class FeaturedAdapter extends PagerAdapter { 
    private ArrayList<FeaturedModel> feature; 
    private Context context; 
    private static LayoutInflater inflater = null; 

    public FeaturedAdapter(MainActivity mainActivity, ArrayList<FeaturedModel> data) { 

     feature=data; 
     context=mainActivity; 

     inflater = (LayoutInflater)context. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return feature.size(); 
    } 

    public class Holder 
    { 
     TextView ftitle; 
     NetworkImageView fimg; 

    } 

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

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

     Holder holder = new Holder(); 
     View rowView; 
     rowView = inflater.inflate(R.layout.feature_row, null); 
     holder.ftitle=(TextView) rowView.findViewById(R.id.featTitle); 
     holder.fimg=(NetworkImageView)rowView.findViewById(R.id.featImg); 
     holder.ftitle.setText(feature.get(position).getName()); 

     // If you are using NetworkImageView 
     holder.fimg.setImageUrl(feature.get(position).getImageURL(), VolleyController.getInstance().getImageLoader()); 


     container.addView(rowView); 
     return rowView; 
    } 

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

} 

結果

[ 
    { 
     "pid": "45", 
     "prod_name": "Product 45", 
     "prod_pic": "http://localhost/images/testone.png", 
     "prod_desc": "some description", 

    }, 
    { 
     "pid": "44", 
     "prod_name": "Product 44", 
     "prod_pic": "http://localhost/images/testtwo.png", 
     "prod_desc": "some description", 

    }, 
    { 
     "pid": "43", 
     "prod_name": "Product 43", 
     "prod_pic": "http://localhost/images/testone.png", 
     "prod_desc": "some description", 

    }, 
    { 
     "pid": "42", 
     "prod_name": "Product 42", 
     "prod_pic": "http://localhost/images/testtwo.png", 
     "prod_desc": "some description", 

    }, 
    { 
     "pid": "41", 
     "prod_name": "Product 41", 
     "prod_pic": "http://localhost/images/testone.png", 
     "prod_desc": "some description", 

    } 
] 
+0

何かが 'onResponse'でnullです。おそらく' response'が 'null'です。あなたのマニフェストに' INTERNET'パーミッションがありますか? – Blundell

+3

ArrayList fdataを初期化します。 –

+0

@Blundellはい、私は自分のマニフェストにインターネット許可を持っています。 –

答えて

1

ArrayList fdataは初期化されていません。項目を追加/選択する前にfdata = new ArrayList<>();に電話してください。

1
  1. あなたは

    REQUESTQUEUEキュー= olleyController.getInstance()getQueue()RequestQueueオブジェクトを2.Makeインターネット許可 を持っていることを確認してください。

  2. queue.add(jsonObjectRequest)をキューにjsonObjectRequest加えます。

  3. PagerAdaptervolley Anonymous classの外側に設定することができます。

+0

あなたの答えをありがとうございますが、アデル・シャザドは私の間違いを指摘しました。 arraylistを初期化するのを忘れてしまった。 –

関連する問題