Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Пример AdMob компилируется, но не запускается

1. Взял пример с офиц сайта. () Запустил. На телефоне работает.
2. Решил проверить и разобраться. Создал новый пустой проект. Вставил в него строки из рабочего примера. Компилится. Но на телефоне не запускается - пишет "Приложение остановилось".

Где же здесь засада, ведь я просто перенес строки (Ctrl+C Ctrl+V) ?

MainActivity.java
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.example.my.banner;
 
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
 
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
 
 
public class MainActivity extends ActionBarActivity {
    private AdView mAdView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
        // values/strings.xml.
        mAdView = (AdView) findViewById(R.id.ad_view);
 
        // Create an ad request. Check your logcat output for the hashed device ID to
        // get test ads on a physical device. e.g.
        // "Use AdRequest.Builder.addTestDevice("ABCDEF012345") to get test ads on this device."
        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .build();
 
        // Start loading the ad in the background.
        mAdView.loadAd(adRequest);
 
    }
 
    @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);
    }
 
    /**
     * Called when leaving the activity
     */
    @Override
    public void onPause() {
        if (mAdView != null) {
            mAdView.pause();
        }
        super.onPause();
    }
 
    /**
     * Called when returning to the activity
     */
    @Override
    public void onResume() {
        super.onResume();
        if (mAdView != null) {
            mAdView.resume();
        }
    }
 
    /**
     * Called before the activity is destroyed
     */
    @Override
    public void onDestroy() {
        if (mAdView != null) {
            mAdView.destroy();
        }
        super.onDestroy();
    }
 
}
activity_main.xml
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="16dp"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:text="@string/hello_world" />
 
    <com.google.android.gms.ads.AdView
        android:id="@+id/ad_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id" />
</RelativeLayout>
strings.xml
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
<resources>
    <string name="app_name">Banner</string>
 
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <!-- This is an ad unit ID for a test ad. Replace with your own banner ad unit id. -->
    <string name="banner_ad_unit_id">ca-app-pub-9231756515545175/9464454040</string>
</resources>
AndroidManifest.xml
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.my.banner">
    <!-- Include required permissions for Google Mobile Ads to run-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
 
        <!--This meta-data tag is required to use Google Play Services.-->
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <activity
            android:name=".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>
        <!--Include the AdActivity configChanges and theme. -->
        <activity
            android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent" />
    </application>
 
</manifest>
build.gradle
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
apply plugin: 'com.android.application'
 
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
 
    defaultConfig {
        applicationId "com.example.my.banner"
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.google.android.gms:play-services-ads:8.1.0'
}
Ответ: Не помешал бы логкэт конечно. В настройках блока должен быть баннер, а не межстраничное объявление. Так что попробуй проверить. Если все-таки у тебя там стоит не баннер, то переделай, и вставь айди нового блока. Если не выйдет, скинь логкэт.
Вопрос: Разбор примера teapot из NDK

Здравствуйте.

Разбирая пример Teapot из примеров NDK столкнулся с непониманием определенных вещей. Информации тоже не могу толком найти. Помогите советом или хотя бы направьте, где копать.

Суть в следующем:

Класс JNIhelper представляет из себя синглтон и предлагает доступ к функциям из Java класса (NDKHelper в примере), при этом используется лок/анлок мьютекса перед использованием attachcurrentthread. Здесь вроде все ясно. Нативщина запускается в отдельном потоке (судя по докам гугла), и что бы приконнектиться к другому потоку, надо встать в очередь, а как она придет заблокировать ресурс пока им пользуешься.

В Классе же TeapotNativeActivity на с++ стороне, имеются 2 функции ShowUI и UpdateFPS, реализованные в классе TeapotNativeActivity.java, при этом никакого мьютекса не используется. Отсюда вопрос

1) Почему в одном случае ресурс лочится для потокобезопасного доступа перед attachcurrentthread, а в другом нет?

И второй вопрос.

2) Во многих классах из NDKHelper.h используется #include "JNIHelper.h", однако функции данного класса не использованы. Вопрос, зачем он туда включен?
Ответ:
Сообщение от Giena
1) Почему в одном случае ресурс лочится для потокобезопасного доступа перед attachcurrentthread, а в другом нет?
Скорее всего, мьютекс позволяет гарантировать отсутствие изменений в полях класса ndk_helper::JNIHelper во время операций.
Сообщение от Giena
2) Во многих классах из NDKHelper.h используется #include "JNIHelper.h", однако функции данного класса не использованы. Вопрос, зачем он туда включен?
JNIHelper.h сам включает некторые заголовки, которые им нужны: это jni.h,vector,string.

Я посоветую поизучать пример san-angeles. Он более удобен для взаимодействия java и C++ кода.
+ .
Вопрос: Есть у кого рабочий пример Анимационного скроллинга ListView?

Есть у кого рабочий пример Анимационного скроллинга ListView?

Есть у кого рабочий пример Анимационного скроллинга ListView?
Ответ: Нашел один рабочий пример https://github.com/cuub/sugared-list-animations-sample
Вопрос: Нужен пример работы Socked клиента, который получает некую инфу от сервера

Может кто скинуть пример работы Socked клиента, который получает некую инфу от сервера?

Я хочу сделать мониторинг игрового сервера с помощью Steam Query.
Ответ: В интернетах таких примеров вагон.
Вопрос: Retrofit + simpleXml может у кого есть примеры?

Retrofit + simpleXml может у кого есть примеры рабочего кода? Что-то с JSON чего хочешь. А с XML почти ничего нету в инете.
Ответ: 2 дня работы и я собрал по частям рабочий пример использования Retrofit2 + SimpleXmlConverterFactory + занесение результата в RecyclerView. И если я не ошибаюсь с использованием архитектурного паттерна MVP

В целом всё также как и с JSON, только модель будет другая.

Но пришлось изрядно попотеть. Теперь буду применять к своему проекту, где более сложная структура XML.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        recyclerView = (RecyclerView) findViewById(R.id.foods_recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        initRestXML();
    }
 
    private void initRestXML() {
        ApiService service = ApiClient.getClient().create(ApiService.class);
        Call<FoodResponse> call = service.getFoods();
        call.enqueue(new Callback<FoodResponse>() {
            @Override
            public void onResponse(Call<FoodResponse> call, Response<FoodResponse> response) {
                ArrayList<Food> foodList = response.body().getFoodList();
                recyclerView.setAdapter(new FoodsAdapter(foodList, R.layout.food_item, getApplicationContext()));
            }
 
            @Override
            public void onFailure(Call<FoodResponse> call, Throwable t) {
                Log.d("TAG", "onFailure: ");
            }
        });
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@Root(name = "food")
public class Food {
    @Element(name = "name")
    String name;
 
    @Element(name = "price")
    String price;
 
    @Element(name = "description")
    String description;
 
    @Element(name = "calories")
    String calories;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPrice() {
        return price;
    }
 
    public void setPrice(String price) {
        this.price = price;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public String getCalories() {
        return calories;
    }
 
    public void setCalories(String calories) {
        this.calories = calories;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ApiClient {
    private static Retrofit retrofit = null;
 
    public static Retrofit getClient() {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(NetworkConstants.BASE_URL)
                    .addConverterFactory(SimpleXmlConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
 
}
Java
1
2
3
4
public interface ApiService {
    @GET(NetworkConstants.GET_FOODS)
    Call<FoodResponse>getFoods();
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class FoodsAdapter extends RecyclerView.Adapter<FoodsAdapter.FoodViewHolder> {
    private ArrayList<Food> foodList;
    private int rowLayout;
    private Context context;
 
    public static class FoodViewHolder extends RecyclerView.ViewHolder {
        LinearLayout contactsLayout;
        TextView name, price, description, calories;
 
        public FoodViewHolder(View v) {
            super(v);
            contactsLayout = (LinearLayout) v.findViewById(R.id.foods_layout);
            name = (TextView) v.findViewById(R.id.food_name);
            price = (TextView) v.findViewById(R.id.food_price);
            description = (TextView) v.findViewById(R.id.food_description);
            calories = (TextView) v.findViewById(R.id.food_calories);
        }
    }
 
    public FoodsAdapter(ArrayList<Food> foods, int rowLayout, Context context) {
        this.foodList = foods;
        this.rowLayout = rowLayout;
        this.context = context;
    }
 
    @Override
    public FoodsAdapter.FoodViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
        return new FoodViewHolder(view);
    }
 
    @Override
    public void onBindViewHolder(FoodViewHolder holder, int position) {
        holder.name.setText(foodList.get(position).getName());
        holder.price.setText(foodList.get(position).getPrice());
        holder.description.setText(foodList.get(position).getDescription());
        holder.calories.setText(foodList.get(position).getCalories());
    }
 
    @Override
    public int getItemCount() {
        return foodList.size();
    }
}
Java
1
2
3
4
5
6
7
8
9
@Root(name = "breakfast_menu")
public class FoodResponse {
    @ElementList(inline = true)
    private ArrayList<Food> foodList;
 
    public ArrayList<Food> getFoodList() {
        return foodList;
    }
}
Java
1
2
3
4
public class NetworkConstants {
    public static final String BASE_URL = "http://www.w3schools.com/xml/";
    public static final String GET_FOODS = "simple.xml";
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.pavel.lesson8.MainActivity">
 
    <android.support.v7.widget.RecyclerView
        android:id="@+id/foods_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
    </android.support.v7.widget.RecyclerView>
</RelativeLayout>
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/foods_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="16dp">
 
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">
 
        <TextView
            android:id="@+id/food_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
 
 
        <TextView
            android:id="@+id/food_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
 
        <TextView
            android:id="@+id/food_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
 
        <TextView
            android:id="@+id/food_calories"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
 
    </LinearLayout>
</LinearLayout>
Добавлено через 12 часов 30 минут
Не забудьте про Permission INTERNET и

Java
1
2
3
4
5
6
7
  compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
    compile ('com.squareup.retrofit2:converter-simplexml:2.1.0'){
        exclude group: 'xpp3', module: 'xpp3'
        exclude group: 'stax', module: 'stax-api'
        exclude group: 'stax', module: 'stax'
    }
Вопрос: SQLlite взять случайную строку

Как в SQLlite базе взять случайную строку?
Пример
SQL
1
SELECT * FROM TABLE ORDER BY RANDOM() LIMIT 1
работает, но пишут, что это только для таблиц с количеством строк до 100, а как взять случайную строку если будет около 1000 строк?

Добавлено через 1 час 46 минут
Работает, но только в sqlitebrowser, в приложении падает с NullPointerException в строке
Java(TM) 2 Platform Standard Edition 5.0
1
Cursor c = db.rawQuery("SELECT * FROM table ORDER BY RANDOM() LIMIT 1", null);
Ответ: я писал, что я "так" не беру. строка примерно такая:
int i = db.delete("myTable", " id = ? ", new String [] { id });
Вопрос: Примеры кода на АС от гугла

Собственно вопрос в том , где брать примеры кодов на АС. Очень часто смотрю на какой нить метод. Иногда понимаю что он делает, но какие параметры требуются на вход и как их сформировать засада. Простенький пример все расставил бы на свои места.
Например cursor.getDouble(colunmIndex); сперва долго соображал где взять colunmIndex. Пока не посмотрел пример не помню с какого сайта. Хотелось бы все в одном месте. описание метода и пример применения. А не на просторах интернета.
Ответ:
Поставь курсов на интересующий тебя класс и нажми Alt+f8
Вопрос: Шаблон Абстрактная фабрика в Android Studio

Доброго дня
Пытаюсь разобраться как проектировать шаблон и похоже что-то идёт не так. За основу взял пример из сети с созданием классов Маг, Лучник и Воин. Решил перенести всё это в среду:


Java
1
2
3
4
5
6
7
package ru.arvalon.abstractfactory;
 
public abstract class SquadronFactory {
    public abstract Mage createMage();
    public abstract Archer createArcher();
    public abstract Warrior createWarrior();
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package ru.arvalon.abstractfactory;
 
interface Mage {
    public void cast();
}
interface Archer {
    public void shoot();
}
interface Warrior {
    public void attack();
}
 
public class ElfSquadronFactory extends SquadronFactory {
    @Override
    public Mage createMage() {
        return new ElfMage();
    }
 
    @Override
    public Archer createArcher() {
        return new ElfArcher();
    }
 
    @Override
    public Warrior createWarrior() {
        return new ElfWarrior();
    }
}
class ElfMage implements Mage {
    @Override
    public void cast() {
    }
}
class ElfArcher implements Archer {
    @Override
    public void shoot() {
    }
}
class ElfWarrior implements Warrior {
    @Override
    public void attack() {
    }
}
Клиент
Java
1
2
3
4
5
public void createSquadron (SquadronFactory facrory){
        Mage mage=facrory.createMage();
        Archer archer=facrory.createArcher();
        Warrior warrior=facrory.createWarrior();
    }
IDE говорит мне что класс ElfSquadronFactory вообще не используется, подсвечивается серым. Хожу по кругу диаграммы классов из учебников.

Не могу понять что не так. Подскажите пожалуйста.
Ответ: Если вы пишите код , к отором не разбираетесь - лучше подумать , а стоит ли писать его. Например из-за интерфейсов я вижу перевод простого кода в сложный. Поэтому я и поставил "не по теме" . Простейшая фигня делается легко и обычными класами. Грубо говоря в вашем случае - у вас должен быть класс warrior которые наследуется от к примеру ClassWarrior. Вам проще попробовать по простому и спросить у нас (это не только андроид но и джава) что не так тут . Кароче 1+1 вы переделали в сложную функцию. За такое руки бить нужно.
Вопрос: Не ищет устройства (Bluetooth)

Взял пример с . Запускаю в режиме отладки (android studio). Ничего не находит. В чём проблема? Ошибки в коде? Или же поиск устройств криво реализован. Есть ли другие способы?
Ответ: Вот кусок в кода, в котором происходит поиск устройств. Помимо конкретно того сайта с примерами, такая реализация поиска встречается в гугле довольно часто (даже на developer.android.com). Других внятных статей я не нашёл. При нажатии на кнопку список очищается, но устройства не находятся.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
final BroadcastReceiver bReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        BTArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        BTArrayAdapter.notifyDataSetChanged();
        }
    }
};
 
public void find(View view) {
    if (myBluetoothAdapter.isDiscovering()) {
        myBluetoothAdapter.cancelDiscovery();
    }
    else {
        BTArrayAdapter.clear();
        myBluetoothAdapter.startDiscovery();       
        registerReceiver(bReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));   
    }   
}
Вопрос: Взять символы с EditText и прировнять их к переменным.Как это можно сделать?

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
Кто знает как можно осуществить вот это.
Например: Есть поле editText 
__02.__08.__1994__
Как взять строку и разделит на символы.
т.е 0 прировнять к переменной А
2 прировнять к переменной B
0 прировнять к переменной C
8 прировнять к переменной A1
 
что бы потом все переменные сложить и получить результат?
Или только можно если для каждого символа создавать edit?
Ответ: Elias_smith,
Java(TM) 2 Platform Standard Edition 5.0
1
String result = data.replace("_","").replace (".","");