2017-02-12 5 views
-1

私はAndroid開発には新しく、ユーザがMain()という名前のフラグメントを開いたときに表示されるナビゲーションドロワーを使って簡単なアプリケーションを作成しようとしていますFirebaseデータベースに追加した名前。Firebaseデータベースから検索機能を追加して以来、アプリケーションがクラッシュする

しかし、クラウドからデータを取得するためのコードを追加してから、アプリがクラッシュしています。助けてください!

私の主な活動は、既定のビューをフラグメントMain(データを取得しようとする前に動作していた)に設定したものです。

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

NavigationView navigationView = null; 
Toolbar toolbar = null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    Main fragment = new Main(); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = 
      getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, fragment); 
    fragmentTransaction.commit(); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

以下は、データを取得するための「メイン」フラグメントのコードです。

public class Main extends Fragment { 

private DatabaseReference mdatabase; 
TextView show; 


public Main() { 
    // Required empty public constructor 
    //show = (ImageView) findViewById(R.id.show); 


} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    View v = inflater.inflate(R.layout.fragment_main, container, false); 
    show = (TextView) v.findViewById(R.id.show); 
    mdatabase = FirebaseDatabase.getInstance().getReference().child("Name"); 
    mdatabase.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      String ret = dataSnapshot.getValue().toString(); 
      show.setText("Name: " + ret); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      show.setText("Name:"); 
     } 
    }); 


    return v; 
} 

} 

とフラグメントの.xmlの下に

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.technobotik.www.learnac.Main"> 

<!-- TODO: Update blank fragment layout --> 


<TextView 
    android:text="Name:" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/show" 
    android:textSize="20dp"/> 

助けてください! ありがとうございました!

+0

結果を投稿する前に値が存在することを確認する必要があります。 – Linxy

答えて

0

データベースロケーションNameに値が含まれていない場合、リスナーによって返されたDataSnapshotは、getValue()の場合はnullを返します。

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    if (dataSnapshot.exists()) { 
     String ret = dataSnapshot.getValue().toString(); 
     show.setText("Name: " + ret); 
    } else { 
     show.setText("Name: NULL"); 
    } 

} 
関連する問題