1

如何将以下代码与异步任务合并。我看到很多教程并对代码进行了更改,但无法完全完成。这段代码完全没问题并且工作正常,但有人建议我将其设为异步任务,以便在登录成功消息消失时调用 Move_to_next 方法来启动新活动。所以请有人在其中添加异步任务代码,以使其正常工作。

代码-

public class LoActivity extends Activity {

        Intent i;
        Button signin;
        TextView error;
        CheckBox check;
        String name="",pass="";
        byte[] data;
        HttpPost httppost;
        StringBuffer buffer;
        HttpResponse response;
        HttpClient httpclient;
        InputStream inputStream;
        SharedPreferences app_preferences ;
        List<NameValuePair> nameValuePairs;
        EditText editTextId, editTextP;

        @Override
        public void onCreate (Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.login);
            signin = (Button) findViewById (R.id.signin);
            editTextId = (EditText) findViewById (R.id.editTextId);
            editTextP = (EditText) findViewById (R.id.editTextP);
            app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
            check = (CheckBox) findViewById(R.id.check);
            String Str_user = app_preferences.getString("username","0" );
            String Str_pass = app_preferences.getString("password", "0");
            String Str_check = app_preferences.getString("checked", "no");
            if(Str_check.equals("yes"))
            {
                editTextId.setText(Str_user);
                editTextP.setText(Str_pass);
                check.setChecked(true);
            }

            signin.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    name = editTextId.getText().toString();
                    pass = editTextP.getText().toString();
                    String Str_check2 = app_preferences.getString("checked", "no");
                    if(Str_check2.equals("yes"))
                    {
                        SharedPreferences.Editor editor = app_preferences.edit();
                        editor.putString("username", name);
                        editor.putString("password", pass);
                        editor.commit();
                    }
                    if(name.equals("") || pass.equals(""))
                    {
                         Toast.makeText(Lo.this, "Blank Field..Please Enter", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {

                    try {
                        httpclient = new DefaultHttpClient();
                        httppost = new HttpPost("http://abc.com/register.php");
                        // Add your data
                        nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("UserEmail", name.trim()));
                        nameValuePairs.add(new BasicNameValuePair("Password", pass.trim()));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        // Execute HTTP Post Request
                        response = httpclient.execute(httppost);
                        inputStream = response.getEntity().getContent();

                        data = new byte[256];

                        buffer = new StringBuffer();
                        int len = 0;
                        while (-1 != (len = inputStream.read(data)) )
                        {
                            buffer.append(new String(data, 0, len));
                        }

                        inputStream.close();
                    }

                    catch (Exception e)
                    {
                        Toast.makeText(LoActivity.this, "error"+e.toString(), Toast.LENGTH_SHORT).show();
                    }
                    if(buffer.charAt(0)=='Y')
                    {
                        Toast.makeText(LoActivity.this, "login successfull", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        Toast.makeText(LoActivity.this, "Invalid Username or password", Toast.LENGTH_SHORT).show();
                    }
                    }
                }
            });

        check.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                // Perform action on clicks, depending on whether it's now checked
                SharedPreferences.Editor editor = app_preferences.edit();
                if (((CheckBox) v).isChecked())
                {
                     editor.putString("checked", "yes");
                     editor.commit();
                }
                else
                {
                     editor.putString("checked", "no");
                     editor.commit();
                }
        }
        });
        }
         public void Move_to_next()
         {
             startActivity(new Intent(LoActivity.this, QnActivity.class));

         }
    }
4

4 回答 4

3

您只需要在您的登录按钮中添加 asyctask 调用单击代码如下

       Context mContext=this;
  String[] result = new String[2];

    signin.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View v)
                    {
                AsyncGetAccessToken aSyncGetToken=new AsyncGetAccessToken();
                aSyncGetToken.execute()}});

创建一个私有类 AsyncTask:

                      private class AsyncGetAccessToken extends AsyncTask<Void, Void, String>
                            {



                                @Override
                                protected String doInBackground(Void... Data) {
                                 name = editTextId.getText().toString();
                                pass = editTextP.getText().toString();
                                String Str_check2 = app_preferences.getString("checked", "no");
                                if(Str_check2.equals("yes"))
                                {
                                    SharedPreferences.Editor editor = app_preferences.edit();
                                    editor.putString("username", name);
                                    editor.putString("password", pass);
                                    editor.commit();
                                }
                                if(name.equals("") || pass.equals(""))
                                {
                                     Toast.makeText(Lo.this, "Blank Field..Please Enter", Toast.LENGTH_SHORT).show();
                                }
                                else
                                {

                                try {
                                    httpclient = new DefaultHttpClient();
                                    httppost = new HttpPost("http://abc.com/register.php");
                                    // Add your data
                                    nameValuePairs = new ArrayList<NameValuePair>(2);
                                    nameValuePairs.add(new BasicNameValuePair("UserEmail", name.trim()));
                                    nameValuePairs.add(new BasicNameValuePair("Password", pass.trim()));
                                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                    // Execute HTTP Post Request
                                    response = httpclient.execute(httppost);
                                    inputStream = response.getEntity().getContent();

                                    data = new byte[256];

                                    buffer = new StringBuffer();
                                    int len = 0;
                                    while (-1 != (len = inputStream.read(data)) )
                                    {
                                        buffer.append(new String(data, 0, len));
                                    }
                               result[0] = response.getStatusLine().getStatusCode()+"";
            result[1] = buffer .toString();
                                    inputStream.close();
                                }

                                catch (Exception e)
                                {
                                    Toast.makeText(LoActivity.this, "error"+e.toString(), Toast.LENGTH_SHORT).show();
                                }
                                if(buffer.charAt(0)=='Y')
                                {
                                    Toast.makeText(LoActivity.this, "login successfull", Toast.LENGTH_SHORT).show();
                                }
                                else
                                {
                                    Toast.makeText(LoActivity.this, "Invalid Username or password", Toast.LENGTH_SHORT).show();
                                }

                            }


    return result;
}
                                @Override
                                protected void onPreExecute() {       
                                    super.onPreExecute();
                                    showLoading();         
                                }
                         @Override
                         protected void onPostExecute(String result)
                         {
                             super.onPostExecute(result);
                             hideLoading();
                         }


                        }

停止加载:

    private void hideLoading()

        {

              if (pDialogTh.isShowing()) {
           pDialogTh.cancel();
        }

        }

开始加载:

        private ProgressDialog pDialogTh = null;

        private void showLoading()

        {

                        // if(pDialog==null)
                        pDialogTh = ProgressDialog.show(mContext, "", "Loading...",
                                true, true);
                        pDialogTh.setCancelable(false);
                        if (!pDialogTh.isShowing()) {
                            pDialogTh.show();
                        }


         }
于 2013-09-26T11:13:16.863 回答
1

尝试这个:

if(name.equals("") || pass.equals(""))
{
 Toast.makeText(Lo.this, "Blank Field..Please Enter", Toast.LENGTH_SHORT).show();
}else{
    RequestClient reqClient = new RequestClient(ClassName.this);
    String AppResponse = null;
    AppResponse = reqClient.execute().get()
}

在应用程序响应中,您将获得响应,根据您的要求更改其数据类型。

创建一个类 RequestClient.java

public class RequestClient extends AsyncTask<String, Void, String>{
Context context;

public RequestClient(Context c) {
    context = c;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected String doInBackground(String... aurl){
String responseString="";
HttpClient client = null;
try {
     client = new DefaultHttpClient();  
     HttpGet get = new HttpGet(aurl[0]);
     HttpResponse responseGet = client.execute(get);  
     HttpEntity resEntityGet = responseGet.getEntity();  
     if (resEntityGet != null) {  
         responseString = EntityUtils.toString(resEntityGet);
         Log.i("GET RESPONSE", responseString);
     }
} catch (Exception e) {
    Log.d("ANDRO_ASYNC_ERROR", "Error is "+e.toString());
}
    Log.d("ANDRO_ASYNC_RESPONSE", responseString);
client.getConnectionManager().shutdown();
 return responseString;

}


@Override
protected void onPostExecute(String response) {
     super.onPostExecute(response); 
    }
}
于 2013-09-26T11:08:33.130 回答
1

试试这个方法

我在您的代码中进行了编辑,只需复制粘贴并尝试

public class LoActivity extends Activity {

    Intent i;
    Button signin;
    TextView error;
    CheckBox check;
    String name = "", pass = "";
    byte[] data;
    HttpPost httppost;
    StringBuffer buffer;
    HttpResponse response;
    HttpClient httpclient;
    InputStream inputStream;
    SharedPreferences app_preferences;
    List<NameValuePair> nameValuePairs;
    EditText editTextId, editTextP;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        signin = (Button) findViewById(R.id.signin);
        editTextId = (EditText) findViewById(R.id.editTextId);
        editTextP = (EditText) findViewById(R.id.editTextP);
        app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
        check = (CheckBox) findViewById(R.id.check);
        String Str_user = app_preferences.getString("username", "0");
        String Str_pass = app_preferences.getString("password", "0");
        String Str_check = app_preferences.getString("checked", "no");
        if (Str_check.equals("yes")) {
            editTextId.setText(Str_user);
            editTextP.setText(Str_pass);
            check.setChecked(true);
        }

        signin.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                name = editTextId.getText().toString();
                pass = editTextP.getText().toString();
                String Str_check2 = app_preferences.getString("checked", "no");
                if (Str_check2.equals("yes")) {
                    SharedPreferences.Editor editor = app_preferences.edit();
                    editor.putString("username", name);
                    editor.putString("password", pass);
                    editor.commit();
                }
                if (name.equals("") || pass.equals("")) {
                    Toast.makeText(Lo.this, "Blank Field..Please Enter", Toast.LENGTH_SHORT).show();
                } else {
                    new LoginTask().execute();
                }
            }
        });

        check.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on clicks, depending on whether it's now
                // checked
                SharedPreferences.Editor editor = app_preferences.edit();
                if (((CheckBox) v).isChecked()) {
                    editor.putString("checked", "yes");
                    editor.commit();
                } else {
                    editor.putString("checked", "no");
                    editor.commit();
                }
            }
        });
    }

    public void Move_to_next() {
        startActivity(new Intent(LoActivity.this, QnActivity.class));

    }

    private class LoginTask extends AsyncTask<Void, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            // Show progress dialog here
        }
        @Override
        protected String doInBackground(Void... arg0) {
            try {
                httpclient = new DefaultHttpClient();
                httppost = new HttpPost("http://abc.com/register.php");
                // Add your data
                nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("UserEmail", name.trim()));
                nameValuePairs.add(new BasicNameValuePair("Password", pass.trim()));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                // Execute HTTP Post Request
                response = httpclient.execute(httppost);
                inputStream = response.getEntity().getContent();

                data = new byte[256];

                buffer = new StringBuffer();
                int len = 0;
                while (-1 != (len = inputStream.read(data))) {
                    buffer.append(new String(data, 0, len));
                }

                inputStream.close();
                return buffer.toString();
            } catch (Exception e) {
                e.printStackTrace();

            }
            return "";
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            // Hide progress dialog here

            if (buffer.charAt(0) == 'Y') {
                Toast.makeText(LoActivity.this, "login successfull", Toast.LENGTH_SHORT).show();
                Move_to_next();
            } else {
                Toast.makeText(LoActivity.this, "Invalid Username or password", Toast.LENGTH_SHORT).show();
            }
        }
    }
}
于 2013-09-26T11:23:55.963 回答
1

我是 android 新手,所以在我的(小研究)中我了解到,如果我们想做一些包括网络访问或其他繁重操作的任务,我们需要在一些异步任务上执行此操作。所以在我看来你可以做这样的事情:

signin.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    ...
                    if(name.equals("") || pass.equals(""))
                    {
                         Toast.makeText(Lo.this, "Blank Field..Please Enter",              Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                       ...
                       YourAsyncClass test = new YourAsyncClass(this);
                       //you can give various string parameters, in this case, u can send the url, make it an constant
                       test.execute(YOUR_URL_LIKE_CONSTANT);
                     }
                     if(buffer.charAt(0)=='Y')
                {
                    Toast.makeText(LoActivity.this, "login successfull", Toast.LENGTH_SHORT).show();
                }
                ...

你的 YourAsynClass 可能是这样的:

public class YourAsynClass extends AsyncTask<String, Void, String> {

    ...

    public YourAsynClass () {
        ...
    }

    //this method is executed before the real task
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ...
        //here you can call some load dialog box
    }

     @Override
protected String doInBackground(String... params){
try {
                        httpclient = new DefaultHttpClient();
                        httppost = new HttpPost("http://abc.com/register.php");
                        // Add your data
                        nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("UserEmail", name.trim()));
                        nameValuePairs.add(new BasicNameValuePair("Password", pass.trim()));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        // Execute HTTP Post Request
                        response = httpclient.execute(httppost);
                        inputStream = response.getEntity().getContent();

                        data = new byte[256];

                        buffer = new StringBuffer();
                        int len = 0;
                        while (-1 != (len = inputStream.read(data)) )
                        {
                            buffer.append(new String(data, 0, len));
                        }

                        inputStream.close();
                    }

                    catch (Exception e)
                    {
                        Toast.makeText(LoActivity.this, "error"+e.toString(), Toast.LENGTH_SHORT).show();
                    }
                   return buffer.toString();
                }
     @Override
             protected void onPostExecute(String result)
             {
                 super.onPostExecute(result);
                 //u can hide the load dialog here
             }
于 2013-09-26T11:22:59.120 回答