2

For the life of me, I can't seem to find out what's wrong with my code.

AgrUserLoginHome.java public void onClick(View v) { if(v.getId()==R.id.btnSubmitLogin) { String username=txtUsername.getText().toString(); String password=txtPassword.getText().toString(); //this is passed to be used in next LoginClientServiceThread class LoginClientServiceThread verifyLog = new LoginClientServiceThread(this,username,password); verifyLog.run(); } } 

LoginClientServiceThread.java

 public class LoginClientServiceThread extends Activity implements Runnable{ private Intent intent; private String username,password; private Context context; public LoginClientServiceThread(Context cont,String user,String pass) { username=user; password=pass; context=cont; } public void run() { try { try { JSONObject json = new JSONObject(); json.put("username", username); json.put("password", password); DefaultHttpClient httpClient = new DefaultHttpClient(); URI uri = new URI("http://10.0.2.2:80/BairyApp/Login.svc"); HttpPost httppost = new HttpPost(uri + "/verifyLogin"); httppost.setHeader("Accept", "application/json"); httppost.setHeader("Content-type", "application/json; charset=utf-8"); HttpResponse response = httpClient.execute(httppost); HttpEntity responseEntity = response.getEntity(); long intCount = responseEntity.getContentLength(); char[] buffer = new char[(int)intCount]; InputStream stream = responseEntity.getContent(); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); try { reader.read(buffer); String str = new String(buffer); intent=new Intent(context,TrainerAccessScreen.class); intent.putExtra("reading",str); if(null!=intent) { Toast.makeText(context, "Working", Toast.LENGTH_LONG).show(); //startActivity shows as null here startActivity(intent); } Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(context, "IOException:"+e.getMessage(), Toast.LENGTH_LONG).show(); } finally { stream.close(); } } catch(URISyntaxException urise) { urise.printStackTrace(); Toast.makeText(context, "urise", Toast.LENGTH_LONG).show(); } catch(ClientProtocolException cpe) { cpe.printStackTrace(); Toast.makeText(context, "cpe", Toast.LENGTH_LONG).show(); } catch(IOException ioe) { ioe.printStackTrace(); Toast.makeText(context, "ioe", Toast.LENGTH_LONG).show(); } } catch(Exception e) { Toast.makeText(context, "Execution failed: "+e.getMessage(), Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } } 

I'm sure the startActivity method is returning a null. I know this because if i change the intent context to "this", the Toast in the IOException directly below it doesn't show.

Any ideas? Oh btw, I'm a beginner so I know the code looks horrible

LogCat

10-26 20:28:48.756: I/dalvikvm(1133): Jit: resizing JitTable from 512 to 1024 10-26 20:41:57.906: W/System.err(1169): java.lang.NullPointerException 10-26 20:41:57.906: W/System.err(1169): at android.app.Activity.startActivityForResult(Activity.java:2827) 10-26 20:41:57.906: W/System.err(1169): at android.app.Activity.startActivity(Activity.java:2933) 10-26 20:41:57.916: W/System.err(1169): at agr.mobile.service.LoginClientServiceThread.run(LoginClientServiceThread.java:76) 10-26 20:41:57.916: W/System.err(1169): at agr.mobile.app.AgrUserLoginHome.onClick(AgrUserLoginHome.java:59) 10-26 20:41:57.916: W/System.err(1169): at android.view.View.performClick(View.java:2485) 10-26 20:41:57.916: W/System.err(1169): at android.view.View$PerformClick.run(View.java:9080) 10-26 20:41:57.916: W/System.err(1169): at android.os.Handler.handleCallback(Handler.java:587) 10-26 20:41:57.916: W/System.err(1169): at android.os.Handler.dispatchMessage(Handler.java:92) 10-26 20:41:57.916: W/System.err(1169): at android.os.Looper.loop(Looper.java:123) 10-26 20:41:57.916: W/System.err(1169): at android.app.ActivityThread.main(ActivityThread.java:3683) 10-26 20:41:57.916: W/System.err(1169): at java.lang.reflect.Method.invokeNative(Native Method) 10-26 20:41:57.916: W/System.err(1169): at java.lang.reflect.Method.invoke(Method.java:507) 10-26 20:41:57.916: W/System.err(1169): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 10-26 20:41:57.926: W/System.err(1169): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 10-26 20:41:57.926: W/System.err(1169): at dalvik.system.NativeStart.main(Native Method) 
2
  • Do you have this class in your manifest? Commented Oct 26, 2012 at 18:41
  • The LoginClientServiceThread.java file is not an activity file. It's just a plain java class meant to do the service operations outside of the activity classes Commented Oct 26, 2012 at 18:47

1 Answer 1

4

You say that LoginClientServiceThread isn't an Activity, yet you extend Activity. Don't do this. If you want to launch an Activity from a non-Activity class, use the following:

intent=new Intent(context,TrainerAccessScreen.class); intent.putExtra("reading",str); if(null!=intent) { Toast.makeText(context, "Working", Toast.LENGTH_LONG).show(); context.startActivity(intent); } 

You're getting a NullPointerException as you're calling startActivity() from the this instance of LoginClientServiceThread. However, as you haven't launched and created that Activity as a normal Activity, you have a null reference. So your final code will look like:

public class LoginClientServiceThread implements Runnable{ private Intent intent; private String username,password; private Context context; public LoginClientServiceThread(Context cont,String user,String pass) { username=user; password=pass; context=cont; } public void run() { try { try { JSONObject json = new JSONObject(); json.put("username", username); json.put("password", password); DefaultHttpClient httpClient = new DefaultHttpClient(); URI uri = new URI("http://10.0.2.2:80/BairyApp/Login.svc"); HttpPost httppost = new HttpPost(uri + "/verifyLogin"); httppost.setHeader("Accept", "application/json"); httppost.setHeader("Content-type", "application/json; charset=utf-8"); HttpResponse response = httpClient.execute(httppost); HttpEntity responseEntity = response.getEntity(); long intCount = responseEntity.getContentLength(); char[] buffer = new char[(int)intCount]; InputStream stream = responseEntity.getContent(); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); try { reader.read(buffer); String str = new String(buffer); intent=new Intent(context,TrainerAccessScreen.class); intent.putExtra("reading",str); if(null!=intent) { Toast.makeText(context, "Working", Toast.LENGTH_LONG).show(); //startActivity shows as null here context.startActivity(intent); } Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(context, "IOException:"+e.getMessage(), Toast.LENGTH_LONG).show(); } finally { stream.close(); } } catch(URISyntaxException urise) { urise.printStackTrace(); Toast.makeText(context, "urise", Toast.LENGTH_LONG).show(); } catch(ClientProtocolException cpe) { cpe.printStackTrace(); Toast.makeText(context, "cpe", Toast.LENGTH_LONG).show(); } catch(IOException ioe) { ioe.printStackTrace(); Toast.makeText(context, "ioe", Toast.LENGTH_LONG).show(); } } catch(Exception e) { Toast.makeText(context, "Execution failed: "+e.getMessage(), Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } } 

You don't need to extend Activity at all in the second class.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.