Краш при запуске на телефоне.

Ответить
Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Краш при запуске на телефоне.

Сообщение Kordan » 07 май 2014, 20:12

Собственно сделал небольшое приложение для отображения карты по уроку 139(http://startandroid.ru/ru/uroki/vse-uro ... ytija.html).
Всё скомпилировалось, апк файл создался без проблем, на телефон всё установилось без проблем. Но при запуске возникает белый экран(1-2 секунды), а затем выдаёт, что процесс завершён.

MainActivity

Код: Выделить всё

package ru.startandroid.develop.p1391googlemaps;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

public class MainActivity extends ActionBarActivity {
	SupportMapFragment mapFragment;
	  GoogleMap map;
	  final String TAG = "myLogs";

	  @Override
	  protected void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_main);

	    mapFragment = (SupportMapFragment) getSupportFragmentManager()
	        .findFragmentById(R.id.map);
	    map = mapFragment.getMap();
	    if (map == null) {
	      finish();
	      return;
	    }
	    init();
	  }
	  private void init() {
	    }

	  public void onClickTest(View view) {
		    map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
		  } 
 

}
MAIN

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 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"
 android:orientation="vertical">
<Button
 android:id="@+id/btnTest"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:onClick="onClickTest"
 android:text="@string/test">
</Button>
<fragment
 android:id="@+id/map"
 android:name="com.google.android.gms.maps.SupportMapFragment"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
</fragment>
</LinearLayout>
Android_Manifest

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.startandroid.develop.p1391googlemaps"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="ru.startandroid.develop.p1391googlemaps.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    <meta-data
	 android:name="com.google.android.maps.v2.API_KEY"
	 android:value="AIzaSyComUhEqr9BL4JjqJE05Lck4j1uABIU08Y">
	</meta-data>
	<meta-data
	 android:name="com.google.android.gms.version"
	 android:value="@integer/google_play_services_version">
	</meta-data>
    </application>
	<uses-permission android:name="android.permission.INTERNET"></uses-permission>
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
	<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"></uses-permission>
	<uses-feature
		 android:glEsVersion="0x00020000"
		 android:required="true">
	</uses-feature>
</manifest>
При создании проекта платформу выбирал 2.3.3, на телефоне 2.3.4


Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 08 май 2014, 08:11

В том то и дело, что не знаю. Нигде ничего не выдаёт, но при запуске приложения просто завершается процесс.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Краш при запуске на телефоне.

Сообщение klblk » 08 май 2014, 08:29

самое время подружиться с logcat.


Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 08 май 2014, 15:10

Спасибо за ссылку на вебинар. Вот что отловил логкэтом.
П.С. Голубая черта - это граница показанного на первом скрине.
Вложения
logcat1.jpg
logcat1.jpg (294.5 КБ) 7058 просмотров
logcat2.jpg
logcat2.jpg (356.64 КБ) 7058 просмотров

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Краш при запуске на телефоне.

Сообщение Mikhail_dev » 08 май 2014, 15:20

[syntax=java5]map = mapFragment.getMap(); [/syntax]
тут и ошибка Nullpointer, в 28 строчке как вы могли увидеть в логе. Вы MapFragment ищете
[syntax=java5]mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map); [/syntax]
но с чего вы взяли, что он обязательно существует? Если его не нашлось, то mapFragmnet будет null и естественно будет ошибка, вызывая у него getMap();

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 08 май 2014, 15:53

Вопрос может тупой, но я не знаю на него ответа.
Что сделать с MapFragment чтобы он не был null?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Краш при запуске на телефоне.

Сообщение Mikhail_dev » 08 май 2014, 15:59

Инициализировать его. Почитайте про фрагменты несколько уроков.
http://startandroid.ru/ru/uroki/vse-uro ... cycle.html

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 08 май 2014, 17:56

Извиняюсь, но толком так и не понял как проинициализировать фрагмент.
return inflater.inflate(R.layout.fragment2, null) ; - это никак не замешано?

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 08 май 2014, 20:25

Просто в самом уроке 139 ничего не сказано про неинициализированный фрагмент. Сказано "Учитывайте, что этот метод может вернуть null.", но что делать чтобы это исправить не говорится.
Буду крайне признателен если кто-нибудь опишет действия для данного случая.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Краш при запуске на телефоне.

Сообщение Foenix » 08 май 2014, 20:57

общий подход описан по ссылке в подписи
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 09 май 2014, 09:48

Кто-нибудь знает, какие значения кроме null может принимать mapFragment?
п.с: Всё ещё в непонятках. На видеоверсии урока и печатной у автора всё работает.
п.п.с: Пересозда проект ещё раз, ошибок нет даже в логкэте, но при открытии приложение сбрасыватся. Всё ещё нужно разобраться с mapFragment.

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 09 май 2014, 18:56

Итак после внимательного изучения урока, понял,что main лежит не там. Поэтому использовал fragment_main со ссылкой на него. Всё заработало, но карта не показывается(только кнопки зума). Очистка проекта и переустановка на устройство не помогают.
Вопрос1: Есть идеи на счёт того как это исправить?
Вопрос2: Для новой проблемы создавать новую тему ил обновлять эту?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Краш при запуске на телефоне.

Сообщение Donart » 09 май 2014, 19:20

Создать правильный ключ

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 09 май 2014, 19:30

Donart писал(а):Создать правильный ключ
А как понять правильный ли он? Я уже два раза пересоздал API ключ с нулевым результатом для приложения.

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Краш при запуске на телефоне.

Сообщение Donart » 09 май 2014, 19:38

Вам видимо придется снова играть в игру на внимательность, я же не знаю как Вы создаете ключ.
Вот цитата из урока
У меня при первом запуске карта была не видна, но были видны кнопки управления масштабом. В логах был такой текст: Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors). В этом случае убедитесь, что все верно сделано с получением ключа. Если проблема остается, то удалите приложение с устройства, сделайте в Eclipse очистку проекта (меню Project > Clean) и снова установите приложение - мне помогло
Ваш код был рабочим изначально, с ключом и без ключа. :|

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Краш при запуске на телефоне.

Сообщение Kordan » 09 май 2014, 19:48

Donart писал(а):Вам видимо придется снова играть в игру на внимательность, я же не знаю как Вы создаете ключ.
Вот цитата из урока
У меня при первом запуске карта была не видна, но были видны кнопки управления масштабом. В логах был такой текст: Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors). В этом случае убедитесь, что все верно сделано с получением ключа. Если проблема остается, то удалите приложение с устройства, сделайте в Eclipse очистку проекта (меню Project > Clean) и снова установите приложение - мне помогло
Ваш код был рабочим изначально, с ключом и без ключа. :|
Ключ создавал по инструкции в этом же уроке. В API Console в сервиcах включал Google Maps Android API v2. Потом в API Access ввёл SHA1 взятый из эклипса и через точку с запятой дописал ru.startandroid.develop.p1391googlemaps. Сгенерированный ключ закинул в нужное поле в манифесте.

Ответить