NullPointerException异常的AsyncTask的OnPostExecute [英] NullPointerException in AsyncTask OnPostExecute

查看:173
本文介绍了NullPointerException异常的AsyncTask的OnPostExecute的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来android.I正在逐渐数据= NULL 执行onPostExecute这是correct.Now我只是想表明一个对话框,没有可用的数据时, 。但我收到 NullPointerException异常

 公共类获取previousChatNewThread延伸的AsyncTask<太虚,太虚,太虚> {            ProgressDialog对话框;
            ArrayList的<&HashMap的LT;字符串,字符串>>数据;            @覆盖
            保护无效doInBackground(虚空...... void1){
                数据=新的ArrayList<&HashMap的LT;字符串,字符串>>();
                数据= HandleJSON.ParseJsonForUserAdminChats(sendHtt prequest(
                        ReturnUserAdminChats
                        管理员,
                        您,
                        一个,
                        clientEmail的,
                        UserAdminChatActivity.LastShowingChatDate));
                返回null;
            }            @覆盖
             保护无效onPostExecute(虚空结果){                super.onPostExecute(结果);
                如果//&LT(data.isEmpty()!); - 在这里的错误
                {
                    adapter.InsertValues​​AtTop(数据);
                }
                其他
                {
                    Toast.makeText(getApplicationContext(),没有更多的数据,Toast.LENGTH_LONG).show();
                }
                如果(dialog.isShowing())
                 dialog.dismiss();             }            @覆盖
             在preExecute保护无效(){
                 对话框= ProgressDialog.show(UserAdminChatActivity.this,,Loading请稍候......,真正的);
             }        }

下面是我的logcat这说明过程的完整的日志:

  12月7日至23日:22:55.976:I / finalAnswer(25159):a@hotmail.com,c@hotmail.com,B @ hotmail的。 COM]
12月7日至23日:23:01.101:I / finalAnswer(25159):[{用户名:莫急,chatText:胡jingalala,chatDate:4 \\\\ \\\\七月2012}, {用户名:您,chatText:胡bingalala,chatDate:4月\\\\ 2012 \\\\},{用户名:莫急,chatText:胡jingalala chatDate:4 \\\\ \\\\七月2012}]
12月7日至23日:23:01.101:I /转到JSON(25159):[{用户名:莫急,chatText:胡jingalala,chatDate:4 \\\\ \\\\七月2012} {用户名:您,chatText:胡bingalala,chatDate:4月\\\\ 2012 \\\\},{用户名:莫急,chatText:胡jingalala ,chatDate:4 \\\\ \\\\七月2012}]
12月7日至23日:23:01.101:I / dateeeeeee(25159):7月4日\\ \\ 2012
12月7日至23日:23:01.101:I / dateeeeeee(25159):7月4日\\ \\ 2012
12月7日至23日:23:01.111:I / dateeeeeee(25159):7月4日\\ \\ 2012
12月7日至23日:23:01.161:I / finalAnswer(25159):新的[]
12月7日至23日:23:02.603:I / finalAnswer(25159):[]
12月7日至23日:23:02.603:I /转到JSON(25159):[]
12月7日至23日:23:02.613:D / AndroidRuntime(25159):关闭VM
12月7日至23日:23:02.613:W / dalvikvm(25159):主题ID = 1:螺纹未捕获的异常退出(组= 0x4001d578)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):致命异常:主要
12月7日至23日:23:02.623:E / AndroidRuntime(25159):显示java.lang.NullPointerException
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在com.app.ServerClient.UserAdminChatActivity$Get$p$pviousChatNewThread.onPostExecute(UserAdminChatActivity.java:197)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在com.app.ServerClient.UserAdminChatActivity$Get$p$pviousChatNewThread.onPostExecute(UserAdminChatActivity.java:1)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在android.os.AsyncTask.finish(AsyncTask.java:417)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在android.os.AsyncTask.access $ 300(AsyncTask.java:127)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在android.os.Handler.dispatchMessage(Handler.java:99)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在android.os.Looper.loop(Looper.java:138)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在android.app.ActivityThread.main(ActivityThread.java:3701)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在java.lang.reflect.Method.invokeNative(本机方法)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在java.lang.reflect.Method.invoke(Method.java:507)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:878)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
12月7日至23日:23:02.623:E / AndroidRuntime(25159):在dalvik.system.NativeStart.main(本机方法)

编辑:

继承人的code为HandleJson:

 公共类HandleJSON {私有静态的ArrayList<&HashMap的LT;字符串,字符串>>聊天;
静态最后弦乐Key_username =username_key;
静态最后弦乐Key_email =email_key;
静态最后弦乐Key_messageText =messageText_key;
静态最后弦乐Key_messageDate =messageDate_key;
静态最后弦乐Key_messageCounts =messageCount_key;
静态布尔NEWOBJECT;公共静态的ArrayList<&HashMap的LT;字符串,字符串>> ParseJsonForLatestChats(字符串jsonData)
{
       尝试{           如果(HandleJSON.newObject)
           {
               聊天=新的ArrayList<&HashMap的LT;字符串,字符串>>();
           }
           Log.i(jsonReturned,jsonData.toString());
           JSONArray jsonarr =新JSONArray(jsonData);
            的for(int i = 0; I< jsonarr.length();我++)
            {
                HashMap的<字符串,字符串> HashMap的=新的HashMap<字符串,字符串>();                hashMap.put(HandleJSON.Key_username,jsonarr.getJSONObject(I).getString(用户名));
                hashMap.put(HandleJSON.Key_email,jsonarr.getJSONObject(I).getString(电子邮件));
                hashMap.put(HandleJSON.Key_messageCounts,jsonarr.getJSONObject(I).getString(计数));                chat.add(HashMap的);            }            返回聊天;
      }
      赶上(JSONException E)
      {
          Log.e(JsonDek,e.getMessage());
          返回null;
      }
}公共静态的ArrayList<&HashMap的LT;字符串,字符串>> ParseJsonForUserAdminChats(字符串jsonData)
{       聊天=新的ArrayList<&HashMap的LT;字符串,字符串>>();尝试{         JSONArray jsonarr =新JSONArray(jsonData);
         Log.i(转到Json的jsonData);
            UserAdminChatActivity.LastShowingChatDate = jsonarr.getJSONObject(0).getString(chatDate);
            的for(int i = jsonarr.length() - 1; I> = 0;我 - )
            {
                HashMap的<字符串,字符串> HashMap的=新的HashMap<字符串,字符串>();                hashMap.put(HandleJSON.Key_username,jsonarr.getJSONObject(I).getString(用户名));
                hashMap.put(HandleJSON.Key_messageText,jsonarr.getJSONObject(ⅰ).getString(chatText));
                hashMap.put(HandleJSON.Key_messageDate,jsonarr.getJSONObject(ⅰ).getString(chatDate));
                Log.i(dateeeeeee,jsonarr.getJSONObject㈠.getString(chatDate));                chat.add(HashMap的);            }
            返回聊天;
      }
      赶上(JSONException E)
      {
          返回null;
      }
}
公共静态的ArrayList<串GT; ReturnUsersEmail(字符串jsonData)抛出JSONException
{
    JSONArray jsonarr =新JSONArray(jsonData);
    ArrayList的<串GT;电子邮件=新的ArrayList<串GT;();    的for(int i = 0; I< jsonarr.length();我++)
    {
        emails.add(jsonarr.getString(I));
    }    返回的电子邮件;
}
}


解决方案

您没有使用的AsyncTask 正常。
如果你读了一节名为的AsyncTask的一般类型 这个文件您将学习如何使用泛型类型为 doInBackground onPostExecute 之间传递数据。
以下是你需要做什么:

 公共类获取previousChatNewThread延伸的AsyncTask<太虚,太虚,列表与LT; HashMap的<字符串,字符串>>> {        ProgressDialog对话框;        @覆盖
        保护列表与LT; HashMap的<字符串,字符串>> doInBackground(虚空......无效){
            返回HandleJSON.ParseJsonForUserAdminChats(sendHtt prequest(
                    ReturnUserAdminChats
                    管理员,
                    您,
                    一个,
                    clientEmail的,
                    UserAdminChatActivity.LastShowingChatDate));
        }        @覆盖
         保护无效onPostExecute(列表<&HashMap的LT;字符串,字符串>>的结果){
            super.onPostExecute(结果);
            如果(空=结果和放大器;!&安培;!result.isEmpty()){//检查不为空或空
                adapter.InsertValues​​AtTop(结果);
            }
            其他
            {
                Toast.makeText(getApplicationContext(),没有更多的数据,Toast.LENGTH_LONG).show();
            }
            如果(dialog.isShowing())
             dialog.dismiss();         }        @覆盖
         在preExecute保护无效(){
             对话框= ProgressDialog.show(UserAdminChatActivity.this,,Loading请稍候......,真正的);
         }    }

如果你得到一个吐司,那么你知道通过 HandleJSON.ParseJsonForUserAdminChats(...)返回的数据将返回或空列表

I am new to android.I am getting data=null when executing the onPostExecute which is correct.Now I just want to show a dialog that there is no data available.But I am getting the NullPointerException.

public class GetPreviousChatNewThread extends AsyncTask<Void,Void,Void> {

            ProgressDialog dialog;
            ArrayList<HashMap<String,String>> data;

            @Override
            protected  Void doInBackground(Void... void1) {
                data=new ArrayList<HashMap<String,String>>();
                data=HandleJSON.ParseJsonForUserAdminChats(sendHttpRequest(
                        "ReturnUserAdminChats",
                        "admin",
                        "You" ,
                        "a",
                        clientEmail,
                        UserAdminChatActivity.LastShowingChatDate));
                return null;
            }

            @Override
             protected void onPostExecute(Void result) {

                super.onPostExecute(result);


                if(!data.isEmpty())      // <-- error here
                {   
                    adapter.InsertValuesAtTop(data);
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "No more data", Toast.LENGTH_LONG).show();
                }
                if(dialog.isShowing())
                 dialog.dismiss();

             }

            @Override
             protected void onPreExecute() {
                 dialog = ProgressDialog.show(UserAdminChatActivity.this, "", "Loading. Please wait...", true);
             }

        }

Here's my Logcat which shows the complete log of the process:

07-23 12:22:55.976: I/finalAnswer(25159): ["a@hotmail.com","c@hotmail.com","b@hotmail.com"]
07-23 12:23:01.101: I/finalAnswer(25159): [{"username":"moji","chatText":"jingalala hu","chatDate":"4\\July\\2012"},{"username":"You","chatText":"bingalala hu","chatDate":"4\\July\\2012"},{"username":"moji","chatText":"jingalala hu","chatDate":"4\\July\\2012"}]
07-23 12:23:01.101: I/GoTo Json(25159): [{"username":"moji","chatText":"jingalala hu","chatDate":"4\\July\\2012"},{"username":"You","chatText":"bingalala hu","chatDate":"4\\July\\2012"},{"username":"moji","chatText":"jingalala hu","chatDate":"4\\July\\2012"}]
07-23 12:23:01.101: I/dateeeeeee(25159): 4\July\2012
07-23 12:23:01.101: I/dateeeeeee(25159): 4\July\2012
07-23 12:23:01.111: I/dateeeeeee(25159): 4\July\2012
07-23 12:23:01.161: I/finalAnswer(25159): new"[]"
07-23 12:23:02.603: I/finalAnswer(25159): []
07-23 12:23:02.603: I/GoTo Json(25159): []
07-23 12:23:02.613: D/AndroidRuntime(25159): Shutting down VM
07-23 12:23:02.613: W/dalvikvm(25159): threadid=1: thread exiting with uncaught exception (group=0x4001d578)
07-23 12:23:02.623: E/AndroidRuntime(25159): FATAL EXCEPTION: main
07-23 12:23:02.623: E/AndroidRuntime(25159): java.lang.NullPointerException
07-23 12:23:02.623: E/AndroidRuntime(25159):    at com.app.ServerClient.UserAdminChatActivity$GetPreviousChatNewThread.onPostExecute(UserAdminChatActivity.java:197)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at com.app.ServerClient.UserAdminChatActivity$GetPreviousChatNewThread.onPostExecute(UserAdminChatActivity.java:1)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at android.os.AsyncTask.finish(AsyncTask.java:417)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at android.os.Looper.loop(Looper.java:138)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at android.app.ActivityThread.main(ActivityThread.java:3701)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at java.lang.reflect.Method.invokeNative(Native Method)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at java.lang.reflect.Method.invoke(Method.java:507)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
07-23 12:23:02.623: E/AndroidRuntime(25159):    at dalvik.system.NativeStart.main(Native Method)

Edit:

Heres the code for HandleJson:

public class HandleJSON {

private static ArrayList<HashMap<String,String>> chat;
static final String Key_username="username_key";
static final String Key_email="email_key";
static final String Key_messageText="messageText_key";
static final String Key_messageDate="messageDate_key";
static final String Key_messageCounts="messageCount_key";
static boolean newObject;

public static ArrayList<HashMap<String,String>>  ParseJsonForLatestChats(String jsonData)
{
       try {

           if(HandleJSON.newObject)
           {
               chat=new ArrayList<HashMap<String,String>>();
           }
           Log.i("jsonReturned",jsonData.toString());
           JSONArray jsonarr=new JSONArray(jsonData);
            for(int i=0;i<jsonarr.length();i++)
            {   
                HashMap<String,String> hashMap=new HashMap<String,String>();

                hashMap.put(HandleJSON.Key_username, jsonarr.getJSONObject(i).getString("username"));
                hashMap.put(HandleJSON.Key_email, jsonarr.getJSONObject(i).getString("email"));
                hashMap.put(HandleJSON.Key_messageCounts, jsonarr.getJSONObject(i).getString("count"));

                chat.add(hashMap);

            }

            return chat;
      }
      catch(JSONException e)
      {
          Log.e("JsonDek", e.getMessage());
          return null;
      }
}

public static ArrayList<HashMap<String,String>>  ParseJsonForUserAdminChats(String jsonData)
{

       chat=new ArrayList<HashMap<String,String>>();

try {

         JSONArray jsonarr=new JSONArray(jsonData);
         Log.i("GoTo Json",jsonData);
            UserAdminChatActivity.LastShowingChatDate=jsonarr.getJSONObject(0).getString("chatDate");
            for(int i=jsonarr.length()-1;i>=0;i--)
            {   
                HashMap<String,String> hashMap=new HashMap<String,String>();

                hashMap.put(HandleJSON.Key_username, jsonarr.getJSONObject(i).getString("username"));
                hashMap.put(HandleJSON.Key_messageText, jsonarr.getJSONObject(i).getString("chatText"));
                hashMap.put(HandleJSON.Key_messageDate, jsonarr.getJSONObject(i).getString("chatDate"));
                Log.i("dateeeeeee",jsonarr.getJSONObject(i).getString("chatDate"));

                chat.add(hashMap);

            }


            return chat;
      }
      catch(JSONException e)
      {
          return null;
      }
}


public static ArrayList<String> ReturnUsersEmail(String jsonData) throws JSONException
{
    JSONArray jsonarr=new JSONArray(jsonData);
    ArrayList<String> emails=new ArrayList<String>();

    for(int i=0;i<jsonarr.length();i++)
    {
        emails.add(jsonarr.getString(i));
    }

    return emails;
}


}

解决方案

You aren't using AsyncTask properly. If you read the section called AsyncTask's generic types in this document you will learn how to use the generic types to pass data between doInBackground and onPostExecute. Here is what you need to do:

public class GetPreviousChatNewThread extends AsyncTask<Void,Void,List<HashMap<String, String>>> {

        ProgressDialog dialog;

        @Override
        protected  List<HashMap<String, String>> doInBackground(Void... void) {
            return HandleJSON.ParseJsonForUserAdminChats(sendHttpRequest(
                    "ReturnUserAdminChats",
                    "admin",
                    "You" ,
                    "a",
                    clientEmail,
                    UserAdminChatActivity.LastShowingChatDate));
        }

        @Override
         protected void onPostExecute(List<HashMap<String, String>> result) {
            super.onPostExecute(result);
            if(null != result && !result.isEmpty()) { //checks not null or empty
                adapter.InsertValuesAtTop(result);
            }
            else
            {
                Toast.makeText(getApplicationContext(), "No more data", Toast.LENGTH_LONG).show();
            }
            if(dialog.isShowing())
             dialog.dismiss();

         }

        @Override
         protected void onPreExecute() {
             dialog = ProgressDialog.show(UserAdminChatActivity.this, "", "Loading. Please wait...", true);
         }

    }

If you do get a Toast, then you know the data returned by HandleJSON.ParseJsonForUserAdminChats(...) is returning null or an empty List.

这篇关于NullPointerException异常的AsyncTask的OnPostExecute的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆