stil not able to run my login app with connection

2019-08-29 09:12发布

stil not able to run my login app with connection to the database. I applied asynctask , but still no luck . can some check this please. Thanks in advance. First of all i get this error as soon as I click the run button. Can you please check the code for me and tell me what is wronge. thanks in advance.

            public class MainActivity extends Activity implements OnClickListener {

                EditText etUser, etPass;
                Button bLogin;

                //Create string variables that will have the input assigned to them
                String username, password;

                //Create a HTTPClient as the form container
                HttpClient httpclient;

                //Use HTTP POST method
                HttpPost httppost;

                //Create an array list for the input data to be sent
                ArrayList<NameValuePair> nameValuePairs;

                //Create a HTTP Response and HTTP Entity
                HttpResponse response;
                HttpEntity entity;


                @Override
                public void onCreate(Bundle savedInstanceState) {

                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);

                    initialise();

                }



                private void initialise() {
                    etUser = (EditText) findViewById(R.id.etUser);
                    etPass = (EditText) findViewById(R.id.etPass);
                    bLogin = (Button) findViewById(R.id.etSubmit);
                    //Now to set an onClickListener
                    bLogin.setOnClickListener((android.view.View.OnClickListener) this);
                }

                public void onClick(View v)  {
                    // This is where we will be working now

                    new MyAsyncTask().execute();

                }//END onClick()

                private static String convertStreamToString(InputStream is) {
                    /*
                     * To convert the InputStream to String we use the BufferedReader.readLine()
                     * method. We iterate until the BufferedReader return null which means
                     * there's no more data to read. Each line will appended to a StringBuilder
                     * and returned as String.
                     */
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                    StringBuilder sb = new StringBuilder();

                    String line = null;
                    try {
                        while ((line = reader.readLine()) != null) {
                            sb.append(line + "\n");
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            is.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    return sb.toString();
                }//END convertStreamToString()



                private class MyAsyncTask extends AsyncTask<Void, Void, Void>
            {
                    ProgressDialog mProgressDialog;
                    @Override
                    protected void onPostExecute(Void result) {
                        mProgressDialog.dismiss();
                    }

                    @Override
                    protected void onPreExecute() {
                        mProgressDialog = ProgressDialog.show(MainActivity.this, "Loading...", "Data is Loading...");
                    }

                    @Override
                    protected Void doInBackground(Void... params) {

                        //Create new default HTTPClient
                        httpclient = new DefaultHttpClient();

                        //Create new HTTP POST with URL to php file as parameter
                        httppost = new HttpPost("http://10.0.2.2/myteamapp/index.php"); 

                        //Assign input text to strings
                        username = etUser.getText().toString();
                        password = etPass.getText().toString();



                        //Next block of code needs to be surrounded by try/catch block for it to work
                        try {
                            //Create new Array List
                            nameValuePairs = new ArrayList<NameValuePair>(2);

                            //place them in an array list
                            nameValuePairs.add(new BasicNameValuePair("user", "username"));
                            nameValuePairs.add(new BasicNameValuePair("pass", "password"));

                            //Add array list to http post
                            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));


                            //assign executed form container to response
                            response = httpclient.execute(httppost); //response from the PHP file

                            //check status code, need to check status code 200
                            if(response.getStatusLine().getStatusCode() == 200){

                                //assign response entity to http entity
                                entity = response.getEntity();

                                //check if entity is not null
                                if(entity != null){


                                    //Create new input stream with received data assigned
                                    InputStream instream = entity.getContent();

                                    //Create new JSON Object. assign converted data as parameter.
                                    JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));

                                    //assign json responses to local strings
                                    String retUser = jsonResponse.getString("user");//mySQL table field
                                    String retPass = jsonResponse.getString("pass");

                                    //Validate login
                                    if(username.equals(retUser)&& password.equals(retPass)){ //Check whether 'retUser' and 'retPass' matches username/password 

                                        //Display a Toast saying login was a success
                                        Toast.makeText(getBaseContext(), "Successful", Toast.LENGTH_SHORT).show();


                                    } else {
                                        //Display a Toast saying it failed.

                                        Toast.makeText(getBaseContext(), "Invalid Login Details", Toast.LENGTH_SHORT).show();
                                    }

                                }


                            }


                        } catch(Exception e){

                           // e.printStackTrace();
                            //Display toast when there is a connection error
                            //Change message to something more friendly
                           Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_SHORT).show();
                           Toast.makeText(getBaseContext(), "Connection Error", Toast.LENGTH_SHORT).show();

                           return null;
                        }



                        return null;
                    }
                }



                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub

                }
            }

标签: android
3条回答
\"骚年 ilove
2楼-- · 2019-08-29 09:42

You are not referring any button, when you clicking.

  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.bLogin:
        new MyAsyncTask().execute();
        break;
    default:
        break;
    }}
查看更多
疯言疯语
3楼-- · 2019-08-29 09:47

You are trying to perform UI operation in doInBackGround as@codeMagic pointedout and what he said is right, but he pointed out something different.

problem is you are displaying Toast message in your doInBackground.

i.e

 Toast.makeText(getBaseContext(), "Successful", Toast.LENGTH_SHORT).show();
 Toast.makeText(getBaseContext(), "Invalid Login Details", Toast.LENGTH_SHORT).show(); 

And in Catch

 Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_SHORT).show();
 Toast.makeText(getBaseContext(), "Connection Error", Toast.LENGTH_SHORT).show();

As doInBackground works on non UI thread, you can't perform UI operation in it..

So when you are trying to get base context it will return null for you and cause NullPointerException.

To remove those Toast messages in doInBackground and Display them onPostExcecute, as onPostExecute runs on UI thread.

查看更多
虎瘦雄心在
4楼-- · 2019-08-29 09:59

As said by @Pragnani, Toast can be used in onPostExecute() method. But if you want that to use there itself, you could probably use runOnUiThread to display Toast messages.

查看更多
登录 后发表回答