Я создал приложение для Android. в моем приложении это связано с firebase. Итак, когда кто-то вводит какие-либо данные, такие как имя, номер мобильного телефона, группа крови, идентификатор FB, они сохраняют в базе данных в реальном времени. а при поиске по группе крови отображается имя, номер мобильного телефона и идентификатор FB. Кроме того, я добавил карту, когда люди нажимают, чтобы показать карту, она показывает местоположение на карте. Однако, когда я развертываю свой проект через студию Android на своих устройствах, он работает нормально. проблем нет. Но когда я подписываю его и создаю подписанный apk, который является типом выпуска, я устанавливаю его на свое устройство вручную, после чего две функции исчезают.
Первый: он не отображает идентификатор facebook. Он показывает null, также если кто-то вводит идентификатор facebook, тогда в базе данных он ничего не хранит. Даже если я вручную ввожу дочерний элемент fb в базу данных, он показывает мне нулевое сообщение.
2-я проблема: карта не сохраняет местоположение должным образом и не отображает карты.
В чем может быть проблема?
вот мои действия по отправке данных:
public class DonorForm extends AppCompatActivity {
Spinner batchChoice;
Spinner groupChoice;
EditText Name;
EditText Mobile;
EditText Fb;
Button Save;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donor_form);
batchChoice = (Spinner) findViewById(R.id.dropdownBatch);
String[] batchs = new String[]{"N-15","N-16", "N-17", "N-18","N-19", "N-20", "N-21", "N-22","N-23","N-24","N-25", "N-26","N-27", "N-28", "N-29", "N-30","N-31","N-32", "N-33", "N-34","N-35", "N-36", "N-37", "N-38","N-39", "N-40","N-41","N-42","N-43", "N-44","N-45", "N-46", "N-47", "N-48","N-49","N-50", "N-51", "N-52","N-53", "N-54", "N-55", "N-56","N-57", "N-58", "N-59", "N-60","BDS-1", "BDS-2","BDS-3", "BDS-4", "BDS-5", "BDS-6","BDS-7", "BDS-8", "BDS-9", "BDS-10","BDS-11", "BDS-12","BDS-13", "BDS-14", "BDS-15", "BDS-16","BDS-17", "BDS-18", "BDS-19", "BDS-20"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, batchs);
batchChoice.setAdapter(adapter);
groupChoice = (Spinner) findViewById(R.id.dropdownGroup);
String[] group = new String[]{"O+","O-", "A+", "B+","A-", "B-", "AB+", "AB-"};
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, group);
groupChoice.setAdapter(adapter1);
Name = (EditText) findViewById(R.id.edt_name);
Mobile = (EditText) findViewById(R.id.edt_mobileNumber);
Fb = (EditText) findViewById(R.id.edt_fb);
Save = (Button) findViewById(R.id.btn_saveDonor);
Save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = Name.getText().toString();
String batch = batchChoice.getSelectedItem().toString();
String group = groupChoice.getSelectedItem().toString();
String mobile = Mobile.getText().toString();
String lat = MainActivity.lat.toString();
String lng = MainActivity.lng.toString();
String fb = Fb.getText().toString();
if (fb.length()>20 )
{
Toast.makeText(DonorForm.this, "Please Enter valid facebook username", Toast.LENGTH_SHORT).show();
}
else{ if (name.length()>25 )
{
Toast.makeText(DonorForm.this, "Please Enter less than 25 character", Toast.LENGTH_SHORT).show();
}
else {if (mobile.length()<11 ||mobile.length()>11 )
{
Toast.makeText(DonorForm.this, "Please Enter 11 Digit Mobile Number", Toast.LENGTH_SHORT).show();
}
else
{
Donor donor = new Donor(name,mobile,group,batch,lat, lng,fb);
DatabaseReference myRef = database.getReference("donors");
myRef.child(batch).child(group).push().setValue(donor);
finish();
}}
}
}
});
}
}
вот моя активность для просмотра данных из firebase: Button buttonMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donor_list);
Bundle extras = getIntent().getExtras();
city = extras.getString("city");
group = extras.getString("group");
Log.i("NAME",city);
Log.i("NAME",group);
donorList = new ArrayList<>();
donorInfo = new ArrayList<>();
listView = (ListView) findViewById(R.id.list_donor);
arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.list, donorList);
listView.setAdapter(arrayAdapter);
buttonMap = (Button) findViewById(R.id.Button_mapShow);
buttonMap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(DonorList.this, MapsActivity.class));
}
});
DatabaseReference myRef = database.getReference("donors");
myRef.child(city).child(group).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Donor donor = dataSnapshot.getValue(Donor.class);
donorInfo.add(donor);
String donorInfo = "Name : "+ donor.name + " \nNumber : " + donor.contuctNumber + " \nFb Username: " + donor.fb;
donorList.add(donorInfo);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
вот карта аддитивности
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng you = new LatLng(MainActivity.lat, MainActivity.lng);
mMap.addMarker(new MarkerOptions().position(you).title("Your Position").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
mMap.moveCamera( CameraUpdateFactory.newLatLngZoom(you , 15.0f) );
for(int i=0; i<DonorList.donorInfo.size(); i++){
Log.d("Donor", String.valueOf(i));
Donor donor = DonorList.donorInfo.get(i);
Double lat = new Double(donor.lat);
Double lng = new Double(donor.lan);
Log.d("Donor", donor.lat);
Log.d("Donor", donor.lan);
LatLng donar = new LatLng(lat, lng);
String donorName = donor.name+ " " + donor.contuctNumber;
mMap.addMarker(new MarkerOptions().position(donar).title(donorName));
}
}
}
вот файл модуля gradle.build:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.nissan.dnmcbloodbank"
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.0.0'
implementation 'com.android.support:animated-vector-drawable:26.0.0'
implementation 'com.android.support:mediarouter-v7:26.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.firebase:firebase-core:9.8.0'
implementation 'com.google.firebase:firebase-core:9.8.0'
implementation 'com.google.firebase:firebase-config:9.8.0'
implementation 'com.google.firebase:firebase-crash:9.8.0'
implementation 'com.firebase:firebase-client-android:2.3.1'
implementation 'com.google.android.gms:play-services-auth:9.8.0'
implementation 'com.google.android.gms:play-services-location:9.8.0'
implementation 'com.google.android.gms:play-services:9.8.0'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'
моя база данных находится в базе данных реального времени firebase. Я тестировал. Все ок. Но после создания его как сгенерированной части apk fb не работает
Да, я понимаю, что это не работает. Я не знаю, как работает база данных firebase, о которой вы говорите. Не все используют одни и те же технологии. Я использую MongoDB, H2, MySQL и SQLite, которые я размещаю самостоятельно. С одной стороны, мои клиенты никогда не имеют доступа к базам данных, а сервер выполняет все проксирование данных. Итак, я просил вас ответить на приведенные выше вопросы, чтобы любой мог помочь, кто не знает firebase или то, как ее базы данных работают по отношению к мобильным приложениям. Обновлено: Добавлено для других: firebase.google.com/products/realtime-database Ваш вопрос кажется расплывчатым с информацией, которую вы предоставили.




Вы тестировали доступ к базе данных с телефона без использования приложения? Настройки вашей базы данных не должны отображаться здесь в отношении частных частей. Но вы также можете добавить информацию или объяснить конфигурацию в той или иной форме, чтобы помочь людям ответить на вопрос. Похоже на проблему с доступом к базе данных. Он размещается централизованно или локально по телефону? База данных сохраняется на диске или в памяти? Каждое приложение, установленное на телефон, только обращается к общей базе данных или создает свою собственную?