2013-08-19 45 views
-1

嘿,我的问题已经与Android的意图和的AsyncTask做我有以下的代码,我从一个按钮Android的意图调用提供错误的AsyncTask onPostExecute()方法

Button.OnClickListener buttonSignin = new Button.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 

     ConnectivityManager connMgr = (ConnectivityManager) 
        getSystemService(Context.CONNECTIVITY_SERVICE); 
       NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
       if (networkInfo == null && networkInfo.isConnected() == false) { 
        Toast.makeText(getApplicationContext(), "No Internet connection", Toast.LENGTH_SHORT).show();     
       } 
       else if(editUserName.getText().length() == 0 && editPassword.getText().length() == 0){ 
       Toast.makeText(getApplicationContext(), "Please fill required details", Toast.LENGTH_SHORT).show(); 
       }else{ 
        enteredUserName = editUserName.getText().toString(); 
        password = editPassword.getText().toString(); 

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
        nameValuePairs.add(new BasicNameValuePair("username", enteredUserName)); 
        nameValuePairs.add(new BasicNameValuePair("password", password)); 
        atn = new AsyncTaskNetwork(); 
        atn.execute("http://staff.faharitech.com/raphael/hirizi/api/public/v1/user/login",nameValuePairs); 

       // new sendLoginDetails().execute("http://staff.faharitech.com/raphael/hirizi/api/public/v1/user/login");  
    } 

的的AsyncTask是在启动的AsyncTask不同的公共类,这是这里

public class AsyncTaskNetwork extends AsyncTask<Object, Integer, String> { 
    ConnectToAPI conn; 
    LoginActivity la; 

    @Override 
    protected String doInBackground(Object... params) { 
     // TODO Auto-generated method stub 

     String result = null; 
     try { 
      conn = new ConnectToAPI(); 
      String url = (String) params[0]; 
      List<NameValuePair> nameValuePairs = (List<NameValuePair>) params[1]; 
      result = conn.postData(url, nameValuePairs); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return result; 
    } 

    @Override 
    protected void onPostExecute(String result){ 
     la = new LoginActivity(); 
     la.parseJsonData(result); 
    } 

} 

终于被调用onPostExecute的方法是在同一个班,其推出的AsyncTask按钮

public void parseJsonData(String result){ 
    try{ 
     JSONObject json_data = new JSONObject(result);   

     if(json_data != null){ 
     JSONObject jObj = json_data.getJSONObject("user"); 
     if(jObj != null){ 
     JSONObject jObj2 =null; 
     username = jObj.getString("username"); 
     System.out.println(username); 
     token = jObj.getString("token"); 
     System.out.println(token); 
     fullName = jObj.getString("full name"); 
     System.out.println(fullName); 
     profilePic = jObj.getString("profilePic"); 
     System.out.println(profilePic);   
     System.out.println(jObj.getString("stores")); 
     JSONArray jArray = new JSONArray(jObj.getString("stores")); 


     for(int i = 0; i < jArray.length(); i++){ 
      jObj2 = jArray.getJSONObject(i); 
      sName = jObj2.getString("name"); 
      System.out.println(sName); 
      sId = jObj2.getString("id"); 
      System.out.println(sId); 
      logo = jObj2.getString("logo"); 
      System.out.println(logo);  
     } 


     displayResults = username + " " + token; 
     } 
     else{ 
     JSONObject jObjMessage = json_data.getJSONObject("message"); 
     errMessage = jObjMessage.getString("message"); 
     displayResults = errMessage; 
     } 
     } 
     }catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 

    } 

    if(username != null && token != null){ 
     Intent intent = new Intent(getApplicationContext(),NavigationActivity.class); 
     startActivity(intent);   
    } 
    else{ 
     Toast.makeText(getApplicationContext(),errMessage, 10000000).show(); 
    } 
} 

我的问题是错误产生的意图调用一个NullPointerException事做哪些方面,我应该使用有其他比getApplicationContext()

更新logcat的

08-19 14:59:45.649: E/AndroidRuntime(6897): FATAL EXCEPTION: main 
08-19 14:59:45.649: E/AndroidRuntime(6897): java.lang.NullPointerException 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.content.ContextWrapper.getPackageName(ContextWrapper.java:135) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.content.ComponentName.<init>(ComponentName.java:75) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.content.Intent.<init>(Intent.java:3491) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at com.faharitech.hirizi.LoginActivity.parseJsonData(LoginActivity.java:336) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at com.faharitech.hirizi.AsyncTaskNetwork.onPostExecute(AsyncTaskNetwork.java:36) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at com.faharitech.hirizi.AsyncTaskNetwork.onPostExecute(AsyncTaskNetwork.java:1) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.os.AsyncTask.finish(AsyncTask.java:631) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.os.Looper.loop(Looper.java:137) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
08-19 14:59:45.649: E/AndroidRuntime(6897):  at dalvik.system.NativeStart.main(Native Method) 
+3

我无法想象这个'la = new LoginActivity();'在任何Android应用程序中工作。为什么要这么做? – 323go

+0

请粘贴logcat。 –

+0

确保getApplicationContext()不为null。 –

回答

0

你有上下文使用你的活动名称点这个,样品:

YourActivity.this 
+0

我已经尝试过,它已经失败 – user1534409

+0

更改此: '@Override protected void onPostExecute(String result){ la = new LoginActivity(); la.parseJsonData(result); } ' 这样: '@覆盖 保护无效onPostExecute(字符串结果){ this.parseJsonData(结果); } ' – Dyna

0

单独敬酒工作? 尝试定义活动类中的asyntask如果对方的回答是行不通的。(应该)

+0

感谢的人,我该怎么做,烤面包不起作用 – user1534409

+0

复制正在使用它的类内的AsyncTaskNetwork类 – codareee

0

让您AsyncTaskNetwork的构造,并采取Context作为参数。声明AsyncTaskNetwork的成员变量为Context mContext并在构造函数中初始化。即

public class AsyncTaskNetwork extends AsyncTask<Object, Integer, String> { 
    ConnectToAPI conn; 
    LoginActivity la; 
    Context mContext; 


public AsyncTaskNetwork(Context context){ 

    this.mContext=context; 
    } 
......... 
} 

在调用Intent的时候,你可以传递这个上下文。即

Intent intent = new Intent(mContext,NavigationActivity.class); 
     startActivity(intent); 
+0

谢谢@Mukesh Kumar问题是,意图调用是从同一个类中进行的, asynctask启动了LoginActivity,因此mContext本身不起作用,您是否有另一种解决方案 – user1534409

相关问题