2016-09-28 4 views
-3

ブールするタイプのjava.util.HashMapの値を変換できませんでした。エラーがライン上にある:は、私は私のアプリの接続状態を検出しようとしているが、これは誤り午前直面している

boolean connected = dataSnapshot.getValue(Boolean.class); 

ので、エラーがOnDataFinishedLoading()方法で提供されます。最初はデータが来ていましたが、今はアプリのネットワーク接続を検出したいだけです。

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 



    public static String KEY_HEADLINES="headlines"; 
    public static String KEY_DETAILS="details"; 


    // private static final String TAG = "Ask Doctor App"; 

    ProgressBar pb; 


    public List<NewsModel> newslist; 

    public NewsAdapter2 adapter; 
    private RecyclerView mRecyclerView; 

    private DatabaseReference mRef; 
    ImageView image_news; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // call the array list 
     newslist = new ArrayList<NewsModel>(); 

     pb = (ProgressBar) findViewById(R.id.progressBarNews); 
     image_news =(ImageView) findViewById(R.id.image_news); 
     mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     //Enabling offline capabilities 
     FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

     // firebase initialisation...... 
     mRef = FirebaseDatabase.getInstance().getReference("News"); 
     // keep my data synced 
     mRef.keepSynced(true); 

     OnDataFinishedLoading(); 





     // load data 

     //declare the toolbar 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 



    // ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     //NetworkInfo netInfo = cm.getActiveNetworkInfo(); 










     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       /* if (isOnline()) { 

        Snackbar.make(view, "Refreshing news ....", Snackbar.LENGTH_LONG) 
          .setAction("Thanks.", null).show(); 
       } else { 
        Snackbar.make(view, "There's a Network problem", Snackbar.LENGTH_LONG) 
          .setAction("", null).show(); 

       } 

       Snackbar.make(view, "Refreshing news ....", Snackbar.LENGTH_LONG) 
         .setAction("Thanks.", null).show();*/ 
      } 
     }); 














     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 




    } 



private void OnDataFinishedLoading(){ 

    mRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      boolean connected = dataSnapshot.getValue(Boolean.class); 
      if(connected) { 

       pb.setVisibility(View.INVISIBLE); 
       LoadData(dataSnapshot); 

      } else{ 
       Toast.makeText(MainActivity.this,"No Network",Toast.LENGTH_LONG).show(); 

      } 

     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      LoadData(dataSnapshot); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 


} 

    public void LoadData (DataSnapshot dataSnapshot){ 




     System.out.println(dataSnapshot.getValue()); 

     NewsModel news_model =dataSnapshot.getValue(NewsModel.class); 


     newslist.add(news_model); 

     adapter = new NewsAdapter2(MainActivity.this, newslist); 
     mRecyclerView.setAdapter(adapter); 




    } 

    /* protected boolean isOnline() { 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
*/ 




    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    /*@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(); 

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

     return super.onOptionsItemSelected(item); 
    }*/ 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 
     Intent i; 
     if (id == R.id.hospitals) { 

      i = new Intent(MainActivity.this, HealthCentres.class); 
      startActivity(i); 


     } else if (id == R.id.doctors) { 

      i = new Intent(MainActivity.this, Doctors.class); 
      startActivity(i); 


     } /*else if (id == R.id.location) { 
      i = new Intent(MainActivity.this, Location.class); 
      startActivity(i); 

     } */else if (id == R.id.tips) { 
      i = new Intent(MainActivity.this, Tips.class); 
      startActivity(i); 

     } /*else if (id == R.id.faq) { 


     } 
     */ 
     /* 
     else if (id == R.id.suggestions) { 

     } 
     */ 
     else if (id == R.id.contacts) { 
      i= new Intent(MainActivity.this, ContactUs.class); 
      startActivity(i); 

     } 
     /* 
     else if (id == R.id.settings) { 

     } 
     */ 
     else if (id == R.id.about) { 
      i = new Intent(MainActivity.this, AboutUs.class); 
      startActivity(i); 

     } 





     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 





} 
+2

エラーメッセージからあなたに不明な点は何ですか? – Tunaki

+0

私が投稿したエラーは、どうすればこの問題を解決できますか?ぬるま湯 –

+0

https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/DataSnapshot.html#getValue-- – Zarwan

答えて

0

オクラホマので、あなたが抱えている問題の核心は、Firebaseが地図ではなく、ブール値を返しているということです。以下は、私のコードです。これは、あなたがこのように構成されているためです。子供が追加されるたびに、DataSnapshot(これは設定したリスナーのことです)を調べてブール値を取得しようとします。ただし、スナップショットはデータベースに追加された子であり(ブール値ではないため)、代わりにマップを取得します。

あなたがしたいすべての子が正常に追加された、私は次の操作を実行したいことを確認した場合:しかし、これは本当にあなたのネットワーク接続の問題を解決するつもりはない

public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

     Object value = dataSnapshot.getValue(); 

     if(value != null) { 
      pb.setVisibility(View.INVISIBLE); 
      LoadData(dataSnapshot); 
     } else{ 
      Toast.makeText(MainActivity.this,"No Network",Toast.LENGTH_LONG).show(); 
     } 
    } 

。 firebaseオブジェクトにヌル以外の子が追加されるたびに、これが行われます。これは頻繁に起こる可能性があります。また、LoadDataでは、渡されたオブジェクトがnullでないことを確認するためにチェックしません。

関連する問題