2

私の人生では、コードの何が問題なのかを見つけることができないようです。

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();
    }
   }
   }

startActivity メソッドが null を返していると確信しています。これは、インテント コンテキストを「this」に変更すると、そのすぐ下の IOException の Toast が表示されないためです。

何か案は?ところで、私は初心者なので、コードがひどいように見えることは知っています

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)
4

1 に答える 1

4

LoginClientServiceThreadあなたはそれがではないと言いActivityます、それでもあなたは拡張しActivityます。これをしないでください。Activity非Activityクラスからを起動する場合は、以下を使用します。

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

のインスタンスからNullPointerException呼び出しているときに、を取得しています。ただし、そのアクティビティを通常のアクティビティとして起動および作成していないため、参照がnullになります。したがって、最終的なコードは次のようになります。startActivity()thisLoginClientServiceThread

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();
        }
    }
}

Activity2番目のクラスでは拡張する必要はまったくありません。

于 2012-10-26T18:53:02.580 に答える