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

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

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

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

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

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

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

Добавлено через 8 минут
И я заметил, что статистические методы, не очень любят использовать. Почему?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2406 / 1851 / 579
Регистрация: 12.05.2014
Сообщений: 6,586
Завершенные тесты: 1
22.05.2015, 20:48     Вызов нестатического метода из другого класса #2
Цитата Сообщение от semiromid Посмотреть сообщение
Этот другой класс нельзя наследовать тем классом, он уже унаследован от другого.
Виталик Кличко? Ты что ли?

Нестатический метод можно вызвать на экземпляре класса.
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 177
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(){
//работаем
// тут инструкция связанная с контекстом и нестатическими переменными и другими методами этого класса, которые тоже не статистические
}
 
}
Pablito
2406 / 1851 / 579
Регистрация: 12.05.2014
Сообщений: 6,586
Завершенные тесты: 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();
    }
}
вполне себе рабочий код, а то, что ты пытаешься из одной активити вызвать что-то в другой - это вопрос вообще из другой плоскости
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 177
23.05.2015, 11:03  [ТС]     Вызов нестатического метода из другого класса #5
Да я так и пытался вызывать, никогда не вызывалось, никогда! Там похоже ссылка меняется на этот метод в классе. Вы хоть раз пробовали таким способом вызывать методы?
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 651
23.05.2015, 11:17     Вызов нестатического метода из другого класса #6
"Там похоже ссылка меняется на этот метод в классе." - вот тут вообще непонятно.
Я думаю нужно взять любую книгу по java(например "Java 7- The Complete Reference") и прочитать хотя бы первые 300страниц. Всё станет намного понятнее.
Pablito
2406 / 1851 / 579
Регистрация: 12.05.2014
Сообщений: 6,586
Завершенные тесты: 1
23.05.2015, 11:38     Вызов нестатического метода из другого класса #7
я написал что код рабочий, значит сам его и проверил
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 177
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
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 651
23.05.2015, 22:28     Вызов нестатического метода из другого класса #9
Нашёл у тебя следующую ошибку:

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

Java
1
((LinearLayout) view.findViewById(R.id.LL1)).setBackgroundResource((Integer) Bol41.get(position));
обращение к элементу из разметки main
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 177
24.05.2015, 01:33  [ТС]     Вызов нестатического метода из другого класса #12
Mikalai, main и item2 я перепутал местами(на форуме неправильно написал) То есть - main - это item2 а item2-это main
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 651
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();
    }
}
semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 177
24.05.2015, 10:16  [ТС]     Вызов нестатического метода из другого класса #14
Сейчас заведу Eclipse и попробую.

Добавлено через 22 минуты
Mikalai, Вау работает!!! Спасибо! Я еще в начале писал, что ссылка меняется на метод))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2015, 21:04     Вызов нестатического метода из другого класса
Еще ссылки по теме:
Вызов другого приложения из текущего Android
Вызов метода при прокрутке activity Android
Android Вызов метода перед завершением работы приложения
Вызов метода при каждом открытии приложения Android
Android Вызов класса

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

Или воспользуйтесь поиском по форуму:
Vladimirys
24.05.2015, 21:04     Вызов нестатического метода из другого класса
  #15

Не по теме:

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

Yandex
Объявления
24.05.2015, 21:04     Вызов нестатического метода из другого класса
Ответ Создать тему
Опции темы

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