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

NullPointerException в дополнительной активности - Android

Восстановить пароль Регистрация
 
Xodock
98 / 0 / 1
Регистрация: 23.07.2012
Сообщений: 7
11.09.2013, 01:19     NullPointerException в дополнительной активности #1
Доброй ночи. Постараюсь сразу изложить проблему.
Есть код, который через php-прослойку, по ссылке, получает данные из mysql БД, через json, возвращаемый сервером, и есть две активности: Главная(MainActivity) и вторая (LoginActivity). В главной код работает, во второй, при нажатии на кнопку, выбрасывает:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
09-10 20:59:17.581: E/AndroidRuntime(1620): FATAL EXCEPTION: main
09-10 20:59:17.581: E/AndroidRuntime(1620): java.lang.NullPointerException
09-10 20:59:17.581: E/AndroidRuntime(1620):     at com.walker.android_php_mysql.LoginActivity.ListDrwaer(LoginActivity.java:132)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at com.walker.android_php_mysql.LoginActivity$JsonReadTask.onPostExecute(LoginActivity.java:95)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at com.walker.android_php_mysql.LoginActivity$JsonReadTask.onPostExecute(LoginActivity.java:1)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at android.os.AsyncTask.finish(AsyncTask.java:631)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at android.os.Looper.loop(Looper.java:137)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at android.app.ActivityThread.main(ActivityThread.java:5039)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at java.lang.reflect.Method.invokeNative(Native Method)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at java.lang.reflect.Method.invoke(Method.java:511)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-10 20:59:17.581: E/AndroidRuntime(1620):     at dalvik.system.NativeStart.main(Native Method)
Прилагаю ссылку на архив с проектом, коды активностей и шаблонов. Работаю в Eclips'e.
Если нужно добавить еще инфы - добавлю.
В разработке под android новичок, с java знакомство тоже начал недавно. Пока не во всё въезжаю.
Вопрошаю о помощи, уважаемые форумчане.

Архив с проектом:
http://rghost.ru/48683375

Главная активность:
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package com.walker.android_php_mysql;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
     private String jsonResult;
     private String url = "http://ao96.ru/android.php?column=password&table=android_users&username=walker";
     private ListView listView;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      listView = (ListView) findViewById(R.id.listView1);
      //accessWebService();
     }
     
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
     }
 // Async Task to access the web
    private class JsonReadTask extends AsyncTask<String, Void, String> {
     @Override
     protected String doInBackground(String... params) {
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost(params[0]);
      try {
       HttpResponse response = httpclient.execute(httppost);
       jsonResult = inputStreamToString(
         response.getEntity().getContent()).toString();
       
      }
    
      catch (ClientProtocolException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
      return jsonResult;
     }
    
     private StringBuilder inputStreamToString(InputStream is) {
      String rLine = "";
      StringBuilder answer = new StringBuilder();
      BufferedReader rd = new BufferedReader(new InputStreamReader(is));
    
      try {
       while ((rLine = rd.readLine()) != null) {
        answer.append(rLine);
       }
      }
    
      catch (IOException e) {
       // e.printStackTrace();
       Toast.makeText(getApplicationContext(),
         "Error..." + e.toString(), Toast.LENGTH_LONG).show();
      }
      return answer;
     }
    
     @Override
     protected void onPostExecute(String result) {
      ListDrwaer();
      Toast.makeText(getApplicationContext(),  result, Toast.LENGTH_LONG).show();
     }
    }// end async task
    
    public void accessWebService(String link) {
     JsonReadTask task = new JsonReadTask();
     // passes values for the urls string array
     task.execute(new String[] { link });
     //Toast.makeText(getApplicationContext(),  jsonResult, Toast.LENGTH_LONG).show();
    }
    
    // build hash set for list view
    public void ListDrwaer() {
     List<Map<String, String>> employeeList = new ArrayList<Map<String, String>>();
    
     try {
         
      JSONObject jsonResponse = new JSONObject(jsonResult);
      JSONArray jsonMainNode = jsonResponse.optJSONArray("emp_info");
 
      for (int i = 0; i < jsonMainNode.length(); i++) {
       JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
       String name = jsonChildNode.optString("password");
       //String number = jsonChildNode.optString("employee no");
       String outPut = name;// + "-" + number;
       employeeList.add(createEmployee("employees", outPut));
      }
     } catch (JSONException e) {
      Toast.makeText(getApplicationContext(), "Error" + e.toString(),
        Toast.LENGTH_SHORT).show();
      
     }
    
     SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList,
       android.R.layout.simple_list_item_1,
       new String[] { "employees" }, new int[] { android.R.id.text1 });
     listView.setAdapter(simpleAdapter);
    }
    
    private HashMap<String, String> createEmployee(String name, String number) {
     HashMap<String, String> employeeNameNo = new HashMap<String, String>();
     employeeNameNo.put(name, number);
     //Toast.makeText(getApplicationContext(),  jsonResult, Toast.LENGTH_LONG).show();
     return employeeNameNo;
    }
    public void toLogin(View v)
    {
        //Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        //startActivity(intent);
        accessWebService(url);
    }
    public void toLogin1(View v)
    {
        Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        startActivity(intent);
        //accessWebService(url);
    }
   }
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
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
<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:onClick="toLogin1"
    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=".MainActivity" >
 
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:layout_alignParentTop="true" >
 
    </ListView>
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/listView1"
        android:layout_marginRight="23dp"
        android:onClick="toLogin"
        android:text="@string/logon" />
 
    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button1"
        android:layout_marginTop="45dp"
        android:ems="10" >
 
        <requestFocus />
    </EditText>
 
    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/editText1"
        android:ems="10"
        android:inputType="textPassword" />
 
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/editText2"
        android:layout_marginTop="58dp"
        android:onClick="toLogin1"
        android:text="Button" />
 
</RelativeLayout>
Вторая активность:
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package com.walker.android_php_mysql;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
 
public class LoginActivity extends Activity {
    private EditText username;
    private EditText password;
     private String jsonResult;
     private String url = "http://ao96.ru/android.php?column=password&table=android_users&username=walker";
     private ListView listView;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.logon);
      listView = (ListView) findViewById(R.id.listView1);
      //accessWebService();
     }
     
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
     }
 // Async Task to access the web
    private class JsonReadTask extends AsyncTask<String, Void, String> {
     @Override
     protected String doInBackground(String... params) {
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost(params[0]);
      try {
       HttpResponse response = httpclient.execute(httppost);
       jsonResult = inputStreamToString(
         response.getEntity().getContent()).toString();
       
      }
    
      catch (ClientProtocolException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
      return jsonResult;
     }
    
     private StringBuilder inputStreamToString(InputStream is) {
      String rLine = "";
      StringBuilder answer = new StringBuilder();
      BufferedReader rd = new BufferedReader(new InputStreamReader(is));
    
      try {
       while ((rLine = rd.readLine()) != null) {
        answer.append(rLine);
       }
      }
    
      catch (IOException e) {
       // e.printStackTrace();
       Toast.makeText(getApplicationContext(),
         "Error..." + e.toString(), Toast.LENGTH_LONG).show();
      }
      return answer;
     }
    
     @Override
     protected void onPostExecute(String result) {
      ListDrwaer();
      Toast.makeText(getApplicationContext(),  result, Toast.LENGTH_LONG).show();
     }
    }// end async task
    
    public void accessWebService(String link) {
     JsonReadTask task = new JsonReadTask();
     // passes values for the urls string array
     task.execute(new String[] { link });
     //Toast.makeText(getApplicationContext(),  jsonResult, Toast.LENGTH_LONG).show();
    }
    
    // build hash set for list view
    public void ListDrwaer() {
     List<Map<String, String>> employeeList = new ArrayList<Map<String, String>>();
    
     try {
         
      JSONObject jsonResponse = new JSONObject(jsonResult);
      JSONArray jsonMainNode = jsonResponse.optJSONArray("emp_info");
 
      for (int i = 0; i < jsonMainNode.length(); i++) {
       JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
       String name = jsonChildNode.optString("password");
       //String number = jsonChildNode.optString("employee no");
       String outPut = name;// + "-" + number;
       employeeList.add(createEmployee("employees", outPut));
      }
     } catch (JSONException e) {
      Toast.makeText(getApplicationContext(), "Error" + e.toString(),
        Toast.LENGTH_SHORT).show();
      
     }
    
     SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList,
       android.R.layout.simple_list_item_1,
       new String[] { "employees" }, new int[] { android.R.id.text1 });
     listView.setAdapter(simpleAdapter);
    }
    
    private HashMap<String, String> createEmployee(String name, String number) {
     HashMap<String, String> employeeNameNo = new HashMap<String, String>();
     employeeNameNo.put(name, number);
     //Toast.makeText(getApplicationContext(),  jsonResult, Toast.LENGTH_LONG).show();
     return employeeNameNo;
    }
    public void toLogin(View v)
    {
        //Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        //startActivity(intent);
        username = (EditText) findViewById(R.id.editText1);
        password = (EditText) findViewById(R.id.editText2);
        String link = "http://ao96.ru/android.php?column=password&table=android_users&username="+username.getText().toString();
        accessWebService(link);
    }
   }
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
38
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:onClick="toLogin" >
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
 
        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10" >
 
            <requestFocus />
        </EditText>
 
        <EditText
            android:id="@+id/editText2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPassword" />
 
        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toLogin"
            android:text="@string/play_button" />
 
    </LinearLayout>
    
 
</ScrollView>
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2013, 01:19     NullPointerException в дополнительной активности
Посмотрите здесь:

NullPointerException Android
NullPointerException Android
NullPointerException Android
NullPointerException Android
NullPointerException при поиске ListView Android
Recycle/CardView NullPointerException Android
NullpointerException при записи файла Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2726 / 1737 / 173
Регистрация: 13.01.2012
Сообщений: 6,510
11.09.2013, 07:16     NullPointerException в дополнительной активности #2
1 почему то не могу найти где же у вас пресловутая кнопка которая роняет (во всяком случае в выложенном коде)
2 как вариант в jsonResult ноль потому что мы не смогли его получить предыдущим вызовом. посмотреть в пошаговой отладке где падает и что там в момент падения
Xodock
98 / 0 / 1
Регистрация: 23.07.2012
Сообщений: 7
11.09.2013, 19:32  [ТС]     NullPointerException в дополнительной активности #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
XML
1
2
3
4
5
6
<Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="toLogin"
            android:text="@string/play_button" />
В logon.xml
Исполняемый метод "toLogin", соответственно, в LoginActivity.java
Спасибо за совет, сейчас попробую.

Добавлено через 9 минут
Чтобы в программе туда попасть, нужно в главной активности нажать на
XML
1
2
3
4
5
6
7
8
9
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/editText2"
        android:layout_marginTop="58dp"
        android:onClick="toLogin1"
        android:text="Button" />
Тогда нас перекинет во вторую активность, и станет доступна крашащая кнопка.

Добавлено через 1 час 25 минут
Проблема решена.
Java
1
listView = (ListView) findViewById(R.id.listView1);
А списочка-то на втором лэйауте и нету.
И, в итоге, тут всё и заканчивалось:
Java
1
listView.setAdapter(simpleAdapter);
vxg
Модератор
 Аватар для vxg
2726 / 1737 / 173
Регистрация: 13.01.2012
Сообщений: 6,510
11.09.2013, 19:42     NullPointerException в дополнительной активности #4
а вы пробовали во время обработки повернуть экран)?
Xodock
98 / 0 / 1
Регистрация: 23.07.2012
Сообщений: 7
11.09.2013, 20:27  [ТС]     NullPointerException в дополнительной активности #5
Не совсем понимаю, зачем? Там же ничего к положению экрана не привязано. И отлаживаю я на эмуляторе, не знаю, можно ли эмулировать наклоны?
vxg
Модератор
 Аватар для vxg
2726 / 1737 / 173
Регистрация: 13.01.2012
Сообщений: 6,510
11.09.2013, 20:43     NullPointerException в дополнительной активности #6
можно. какой то из функциональных клавиш. да, ничего не привязано. кроме того что у вас по завершению обработки идет обращение к элементу формы, а форма при повороте пересоздается)
Xodock
98 / 0 / 1
Регистрация: 23.07.2012
Сообщений: 7
11.09.2013, 22:38  [ТС]     NullPointerException в дополнительной активности #7
Но на logon.xml всё равно нет элемента, с id "listView1", форма бы пересоздалась, но как это помогло бы? Не понимаю(
verylazy
Заблокирован
11.09.2013, 22:49     NullPointerException в дополнительной активности #8
по идее ругается на 95-ю строку LoginActivity
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show()

я бы перед ней написал
Java
1
System.out.println(getApplicationContext() + " " + result);
Xodock
98 / 0 / 1
Регистрация: 23.07.2012
Сообщений: 7
12.09.2013, 00:21  [ТС]     NullPointerException в дополнительной активности #9
Нет, это была 132 строка этого файла. Вот:
Проблема решена.
Java
1
listView = (ListView) findViewById(R.id.listView1);
А списочка-то на втором лэйауте и нету.
И, в итоге, тут всё и заканчивалось(строка 132):
Java
1
listView.setAdapter(simpleAdapter);
Всем спасибо за помощь.
vxg
Модератор
 Аватар для vxg
2726 / 1737 / 173
Регистрация: 13.01.2012
Сообщений: 6,510
12.09.2013, 07:22     NullPointerException в дополнительной активности #10
Цитата Сообщение от Xodock Посмотреть сообщение
Но на logon.xml всё равно нет элемента, с id "listView1", форма бы пересоздалась, но как это помогло бы? Не понимаю(
я с асинхронной задачей не работал, но идея такая: задача запускается и работает. экран поворачивают. все элементы экрана убиваются и создаются новые. задача заканчивает работать и модифицирует элемент экрана. если задача закончит работать до того как отработал onCreate (просто не знаю возможно ли это) она получит доступ к неинициализированному элементу экрана.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 15:04     NullPointerException в дополнительной активности
Еще ссылки по теме:

NullPointerException Android
NullPointerException Android
Android Unboxing of may produce NullPointerException
Ошибка java.lang.NullPointerException Android
NullPointerException в адаптере RecyclerView Android

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

Или воспользуйтесь поиском по форуму:
Xodock
98 / 0 / 1
Регистрация: 23.07.2012
Сообщений: 7
12.09.2013, 15:04  [ТС]     NullPointerException в дополнительной активности #11
Буду иметь ввиду возможность такого развития событий, большое спасибо.
Yandex
Объявления
12.09.2013, 15:04     NullPointerException в дополнительной активности
Ответ Создать тему
Опции темы

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