java - Context with BackgroundTask and Facebook -


i have problem android application. if access "app account" it's ok.

otherwise if access facebook account credential, context null.

how solve this?

below code. thank in advance.

login.java :

public class login extends appcompatactivity {  context ctx; private loginbutton loginbuttonfb; private textview info; private callbackmanager callbackmanager; edittext et_name, et_pass; string login_name, login_pass; static final string username = "user_name";  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      facebooksdk.sdkinitialize(getapplicationcontext());     setcontentview(r.layout.activity_login);     callbackmanager = callbackmanager.factory.create();     loginbuttonfb = (loginbutton)findviewbyid(r.id.login_button_fb);     loginbuttonfb.setreadpermissions("user_friends");      et_name = (edittext) findviewbyid(r.id.user_name);     et_pass = (edittext) findviewbyid(r.id.user_pass);     info = (textview)findviewbyid(r.id.info);     loginbuttonfb.registercallback(callbackmanager, new facebookcallback<loginresult>() {         @override         public void onsuccess(loginresult loginresult) {              new graphrequest(                     accesstoken.getcurrentaccesstoken(),                     loginresult.getaccesstoken().getuserid(),                     null,                     httpmethod.get,                     new graphrequest.callback() {                         public void oncompleted(graphresponse response) {                             try {                                 jsonobject data = response.getjsonobject();                                 string idfb = data.getstring("id");                                 string namefb = data.getstring("name");                                 string method = "loginfb";                                 backgroundtask backgroundtask = new backgroundtask(ctx);                                 backgroundtask.execute(method, namefb, idfb);                             } catch (jsonexception e) {                                 e.printstacktrace();                             }                          }                     }             ).executeasync();          }          @override         public void oncancel() {             info.settext("login attempt canceled.");         }          @override         public void onerror(facebookexception e) {             info.settext("login attempt failed.");         }     });      }    @override protected void onactivityresult(int requestcode, int resultcode, intent data) {     callbackmanager.onactivityresult(requestcode, resultcode, data); }   public void userreg(view view){      intent intent = new intent(this, registration.class);     startactivity(intent); }    private class backgroundtask extends asynctask<string, void, string> {      context ctx;      backgroundtask(context ctx){         this.ctx = ctx;     }      @override     protected string doinbackground(string... params) {         string method = params[0];         if (method.equals("login")){             string login_url = "http://192.168.1.118:80/webappdb/login.php";             string login_name = params[1];             string login_pass = params[2];             try {                 url url = new url(login_url);                 httpurlconnection httpurlconnection = (httpurlconnection) url.openconnection();                 httpurlconnection.setrequestmethod("post");                 httpurlconnection.setdooutput(true);                 httpurlconnection.setdoinput(true);                 outputstream outputstream = httpurlconnection.getoutputstream();                 bufferedwriter bufferedwriter = new bufferedwriter(new outputstreamwriter(outputstream, "utf-8"));                  string data = urlencoder.encode("login_name", "utf-8") + "=" + urlencoder.encode(login_name, "utf-8") + "&" +                         urlencoder.encode("login_pass", "utf-8") + "=" + urlencoder.encode(login_pass, "utf-8");                 bufferedwriter.write(data);                 bufferedwriter.flush();                 bufferedwriter.close();                 outputstream.close();                  inputstream inputstream = httpurlconnection.getinputstream();                 bufferedreader bufferedreader = new bufferedreader((new inputstreamreader(inputstream, "iso-8859-1")));                 string response = "";                 string line = "";                 while((line = bufferedreader.readline()) != null){                     response += line;                 }                 bufferedreader.close();                 inputstream.close();                 httpurlconnection.disconnect();                 return response;              } catch (malformedurlexception e) {                 e.printstacktrace();             } catch (ioexception e) {                 e.printstacktrace();             }           }          else if(method.equals("loginfb")){             string login_name = params[1];             string id = params[2];             string loginfb_url = "http://192.168.1.118:80/webappdb/loginfb.php";             try {                 url url = new url(loginfb_url);                 httpurlconnection httpurlconnection = (httpurlconnection) url.openconnection();                 httpurlconnection.setrequestmethod("post");                 httpurlconnection.setdooutput(true);                 httpurlconnection.setdoinput(true);                 outputstream outputstream = httpurlconnection.getoutputstream();                 bufferedwriter bufferedwriter = new bufferedwriter(new outputstreamwriter(outputstream, "utf-8"));                  string data = urlencoder.encode("login_namefb", "utf-8") + "=" + urlencoder.encode(login_name, "utf-8") + "&" +                         urlencoder.encode("id", "utf-8") + "=" + urlencoder.encode(id, "utf-8");                 bufferedwriter.write(data);                 bufferedwriter.flush();                 bufferedwriter.close();                 outputstream.close();                  inputstream inputstream = httpurlconnection.getinputstream();                 bufferedreader bufferedreader = new bufferedreader((new inputstreamreader(inputstream, "iso-8859-1")));                 string response = "";                 string line = "";                 while((line = bufferedreader.readline()) != null){                     response += line;                 }                 bufferedreader.close();                 inputstream.close();                 httpurlconnection.disconnect();                 return response;              } catch (malformedurlexception e) {                 e.printstacktrace();             } catch (ioexception e) {                 e.printstacktrace();             }           }         return null;     }        @override     protected void onpostexecute(string result) {          if(result.equals("login failed, try again.")){              toast.maketext(ctx, result, toast.length_long).show();         }         if (result.equals("login success!")){             intent intent = new intent(ctx,userprofile.class);             intent.putextra(username, login_name);             startactivity(intent);              toast.maketext(ctx, result, toast.length_long).show();         }      } }     public void userlogin(view view){      login_name = et_name.gettext().tostring();     login_pass = et_pass.gettext().tostring();     string method = "login";     backgroundtask backgroundtask = new backgroundtask(this);     backgroundtask.execute(method, login_name, login_pass);  }      } 

stack trace:

gamingproject.sellmybooks e/androidruntime: fatal exception: main         process: gamingproject.sellmybooks, pid: 30637         java.lang.nullpointerexception: attempt invoke virtual method 'java.lang.string android.content.context.getpackagename()' on null object reference         @ android.content.componentname.<init>(componentname.java:77)         @ android.content.intent.<init>(intent.java:4144)         @ gamingproject.sellmybooks.login$backgroundtask.onpostexecute(login.java:228)         @ gamingproject.sellmybooks.login$backgroundtask.onpostexecute(login.java:123)         @ android.os.asynctask.finish(asynctask.java:632)         @ android.os.asynctask.access$600(asynctask.java:177)         @ android.os.asynctask$internalhandler.handlemessage(asynctask.java:645)         @ android.os.handler.dispatchmessage(handler.java:102)         @ android.os.looper.loop(looper.java:135)         @ android.app.activitythread.main(activitythread.java:5536)         @ java.lang.reflect.method.invoke(native method)         @ java.lang.reflect.method.invoke(method.java:372)         @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1397)         @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1192) 

on login activity, change 'context ctx' 'context mcontext' , when oncreate() starts, do

 mcontext = this;  

like that:

@override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      mcontext = this;  ... } 

on method userlogin, send 'mcontext'

public void userlogin(view view){      login_name = et_name.gettext().tostring();     login_pass = et_pass.gettext().tostring();     string method = "login";     backgroundtask backgroundtask = new backgroundtask(mcontext);     backgroundtask.execute(method, login_name, login_pass);  } 

Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

python - pip wont install .WHL files -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -