Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
#1

Вызов нестатического метода из другого класса - Программирование Android

22.05.2015, 20:44. Просмотров 1365. Ответов 14
Метки нет (Все метки)

Здравствуйте. Подскажите, как можно вызвать нестатистический метод из другого класса.
1.Этот другой класс нельзя наследовать тем классом, он уже унаследован от другого.
2.Манипуляции с контекстом не хочу использовать.
3.Через экземпляр класса вылетает ошибка.

Какие есть варианты?

Добавлено через 8 минут
И я заметил, что статистические методы, не очень любят использовать. Почему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2015, 20:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов нестатического метода из другого класса (Программирование Android):

Вызов метода из другого класса - Программирование Android
Не могу разобраться, почему вылетает приложение, когда пытаюсь задать текст для TextView в MainActivity из другого класса. Подскажите...

Вызов метода из другого Activity - Программирование Android
Здраствуйте. Помогите,пожалуйста, разобраться с несколькими вопросами: 1) Правильно ли, что "Настройки" я выделил в отдельный Activity ...

Вызов метода из класса в таймере - Программирование Android
Не могу получить титул веб страницы в таймере (ошибка). Пример: public class Main_Web extends WebView { String texst =...

Null при вызове метода из другого класса - Программирование Android
Суть такая. Я создал приложение с двумя активити NavigationView (через стандартный конструктор Adroid Studio). В шапку NavView я вывожу...

Как изменить Textview из другого класса (класса адаптера RecyclerView) - Программирование Android
У меня есть список RecyclerView тоесть этот файл Basket и файл что реализует cardwiew BasketAdapter. как мне изменить TextView allPrice из...

Вызов метода в onCreate() - Программирование Android
Здравствуйте.Пытаюсь загружать сохраненные данные при старте приложения и сохранять при выходе с помощью Preferences. Добавлял написанные...

14
Pablito
2506 / 1990 / 620
Регистрация: 12.05.2014
Сообщений: 6,953
Завершенные тесты: 1
22.05.2015, 20:48 #2
Цитата Сообщение от semiromid Посмотреть сообщение
Этот другой класс нельзя наследовать тем классом, он уже унаследован от другого.
Виталик Кличко? Ты что ли?

Нестатический метод можно вызвать на экземпляре класса.
3
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
23.05.2015, 00:44  [ТС] #3
Паблито, Так не получается так, и никогда не получалось. Вылетает ошибка, всегда.


Нужно вызвать метод Wind() из метода Met()

класс 1
Java
1
2
3
4
5
6
7
public class MyAd1 extends Activity {
 
public void Met(){
//работаем
}
 
}
класс 2
Java
1
2
3
4
5
6
7
8
public class MyAd2 extends Activity {
 
public void Wind(){
//работаем
// тут инструкция связанная с контекстом и нестатическими переменными и другими методами этого класса, которые тоже не статистические
}
 
}
0
Pablito
2506 / 1990 / 620
Регистрация: 12.05.2014
Сообщений: 6,953
Завершенные тесты: 1
23.05.2015, 09:53 #4
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
    public static void main(String[] args) {
 
        A a = new A();
        B b = new B();
        a.b = b;
        b.a = a;
        a.method1();
        b.method2();
 
    }
 
class A {
    B b;
    void method1() {
        b.method2();
    }
}
 
class B {
    A a;
    void method2() {
        a.method1();
    }
}
вполне себе рабочий код, а то, что ты пытаешься из одной активити вызвать что-то в другой - это вопрос вообще из другой плоскости
0
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
23.05.2015, 11:03  [ТС] #5
Да я так и пытался вызывать, никогда не вызывалось, никогда! Там похоже ссылка меняется на этот метод в классе. Вы хоть раз пробовали таким способом вызывать методы?
0
Mikalai
259 / 235 / 95
Регистрация: 11.01.2015
Сообщений: 662
23.05.2015, 11:17 #6
"Там похоже ссылка меняется на этот метод в классе." - вот тут вообще непонятно.
Я думаю нужно взять любую книгу по java(например "Java 7- The Complete Reference") и прочитать хотя бы первые 300страниц. Всё станет намного понятнее.
0
Pablito
2506 / 1990 / 620
Регистрация: 12.05.2014
Сообщений: 6,953
Завершенные тесты: 1
23.05.2015, 11:38 #7
я написал что код рабочий, значит сам его и проверил
0
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
23.05.2015, 21:02  [ТС] #8
Вот все данные
MainActivity
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class MainActivity extends Activity {
 
    private Adapter addap;
    private ArrayList<Integer> ImagV;
    private ArrayList<String> str;
    private ListView listView1;
    LayoutInflater lInflater;
    private int e000;
    Context con;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i("333"," Проверка 10000000");
        
        listView1 = (ListView) findViewById(R.id.listView1);
        ImagV = new ArrayList<Integer>();  
        str = new ArrayList<String>();  
        addap = new Adapter(this,ImagV,str);
        listView1.setAdapter(addap);
        
        con=this;
        
        
        for(int i=0;i<10;i++){
            Log.i("333"," Проверка 000");
         str.add("777");
         ImagV.add(R.drawable.ic_launcher); 
        }
        
        
    }
 
    
    
    
    
    
    
    public void Activ1(){
            
        Activ2();
    }
    
    
    
    public void Activ2(){
        
        //Log.i("333"," Проверка");
        ImagV.clear();  
        str.clear();
        addap.notifyDataSetChanged();
        Context f=con;
        
        if(e000!=10){
            
        }
        Acti77771();
        
    }
    private void Acti77771(){
        
        Log.i("333"," Проверка");
        for(int i=0;i<10;i++){
            Log.i("333"," Проверка 000");
         str.add("777");
         ImagV.add(R.drawable.ic_launcher); 
        }
    }
class Adapter
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
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
public class Adapter extends BaseAdapter {
 
    private ArrayList<Integer> Bol41 = new ArrayList<Integer>();
    private ArrayList<String> str = new ArrayList<String>();
    private View view2=null;
    private LayoutInflater lInflater;
 
    private Context ctx;
    
    Adapter(Context context, ArrayList<Integer> Bol4, ArrayList<String> st) {    
        Bol41=Bol4;
        ctx=context;
        str=st;
 
      }
    
    
    
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Bol41.size();
    }
 
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return Bol41.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Log.i("333"," Проверка 1");
        View view = convertView;
        view2 = convertView;
        if (convertView == null) 
        {   
        lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        view = lInflater.inflate(R.layout.item2, parent, false); 
        }
        
        ((LinearLayout) view.findViewById(R.id.LL1)).setBackgroundResource((Integer) Bol41.get(position));    
        ((TextView) view.findViewById(R.id.tvDescr)).setText((String) str.get(position));
        
        
        
        
        
        view.findViewById(R.id.imageView1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {         
              
                Met();
            }
        });
        
        
        
        
        view2=null;         
        return view;
    }
    
    
    
    
    
    
    
    public void Met(){
        
        MainActivity yr = new MainActivity();   
        yr.Activ2();
        
    }
    
    
    
 
}
main
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LL1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="false"
    android:orientation="horizontal" >
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/ic_launcher" />
 
    <TextView
        android:id="@+id/tvDescr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />
 
</LinearLayout>
item2
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
<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.nametest.MainActivity" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:text="@string/hello_world" />
 
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="33dp" >
    </ListView>
 
</RelativeLayout>
Лог с ошибкой
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
05-23 20:21:56.559: D/AndroidRuntime(2540): Shutting down VM
05-23 20:21:56.567: W/dalvikvm(2540): threadid=1: thread exiting with uncaught exception (group=0xa6176908)
05-23 20:21:56.579: E/AndroidRuntime(2540): FATAL EXCEPTION: main
05-23 20:21:56.579: E/AndroidRuntime(2540): java.lang.NullPointerException
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.example.nametest.MainActivity.Activ2(MainActivity.java:67)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.example.nametest.Adapter.Met(Adapter.java:114)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.example.nametest.Adapter$1.onClick(Adapter.java:79)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.view.View.performClick(View.java:4204)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.view.View$PerformClick.run(View.java:17355)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.os.Handler.handleCallback(Handler.java:725)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.os.Looper.loop(Looper.java:137)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at android.app.ActivityThread.main(ActivityThread.java:5041)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at java.lang.reflect.Method.invokeNative(Native Method)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at java.lang.reflect.Method.invoke(Method.java:511)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-23 20:21:56.579: E/AndroidRuntime(2540):     at dalvik.system.NativeStart.main(Native Method)
05-23 20:21:59.223: I/Process(2540): Sending signal. PID: 2540 SIG: 9
0
Mikalai
259 / 235 / 95
Регистрация: 11.01.2015
Сообщений: 662
23.05.2015, 22:28 #9
Нашёл у тебя следующую ошибку:

В MainActivity ты подключаешь разметку setContentView(R.layout.main).
После этого ты ищешь там элемент listView1 = (ListView) findViewById(R.id.listView1);
Юмор в том что его нету на этой разметке. он находится на разметке item2.
1
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
24.05.2015, 00:47  [ТС] #10
Добавлено через 1 минуту
Mikalai, Ой...Сорри сорри... это я на форуме названия перепутал .. Вместо main - item2
0
Mikalai
259 / 235 / 95
Регистрация: 11.01.2015
Сообщений: 662
24.05.2015, 01:29 #11
теперь проблема в адаптере. в строке

Java
1
((LinearLayout) view.findViewById(R.id.LL1)).setBackgroundResource((Integer) Bol41.get(position));
обращение к элементу из разметки main
1
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
24.05.2015, 01:33  [ТС] #12
Mikalai, main и item2 я перепутал местами(на форуме неправильно написал) То есть - main - это item2 а item2-это main
0
Mikalai
259 / 235 / 95
Регистрация: 11.01.2015
Сообщений: 662
24.05.2015, 02:05 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
вот у тебя в адаптере метод

Java
1
2
3
4
    public void Met(){
        MainActivity yr = new MainActivity();
        yr.Activ2();
    }
тут ты создаёшь новый экземпляр MainActivity. Поэтому там всё пусто.

В адаптер ты ж передаёшь ссылку на майн активити(this). Её нужно подхватить и использовать, а не моздавать новыеэкземпляры. Адаптер должен выглядеть примерно так:

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
47
48
49
50
51
52
53
54
55
public class Adapter extends BaseAdapter {
 
    private ArrayList<Integer> Bol41 = new ArrayList<>();
    private ArrayList<String> str = new ArrayList<>();
    MainActivity ma;
 
    private Context ctx;
 
    Adapter(Context context, ArrayList<Integer> Bol4, ArrayList<String> st) {
        Bol41=Bol4;
        ctx=context;
        str=st;
        this.ma = (MainActivity) context;
    }
 
    @Override
    public int getCount() {
        return Bol41.size();
    }
 
    @Override
    public Object getItem(int position) {
        return Bol41.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.i("333", " Проверка 1");
        View view = convertView;
        if (convertView == null)
        {
            LayoutInflater lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = lInflater.inflate(R.layout.main, parent, false);
        }
 
        view.findViewById(R.id.LL1).setBackgroundResource(Bol41.get(position));
        ((TextView) view.findViewById(R.id.tvDescr)).setText(str.get(position));
        view.findViewById(R.id.imageView1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Met();
            }
        });
        return view;
    }
 
    public void Met(){
        this.ma.Activ2();
    }
}
1
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 179
24.05.2015, 10:16  [ТС] #14
Сейчас заведу Eclipse и попробую.

Добавлено через 22 минуты
Mikalai, Вау работает!!! Спасибо! Я еще в начале писал, что ссылка меняется на метод))
0
Vladimirys
24.05.2015, 21:04     Вызов нестатического метода из другого класса
  #15

Не по теме:

Меняю ссылки, на методы, с вашей доплатой.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2015, 21:04
Привет! Вот еще темы с ответами:

Вызов java метода из native - Программирование Android
Привет, чтот не пойму зачем у меня ошибка происходит... Значит что хочу и что происходит. Есть активити с TextView и кнопкой. В...

Вызов другого приложения из текущего - Программирование Android
Как вызвать другое приложение при нажатии той же кнопки? Читал, что нужна уникальная ссылка, а вот какая и где её взять.... Буду благодарен...

Вызов метода при прокрутке activity - Программирование Android
Как обработать событие когда activity прокрутили в самый низ что бы вызвать какой нибудь метод? Например как новости в ВК при прокрутке...

Вызов метода при каждом открытии приложения - Программирование Android
Мне нужно, что бы при открытии приложения вызывался определенный метод. Если ставлю в onCreate, то вызов его происходит только если все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
24.05.2015, 21:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru