Закрытие приложения при нажатии кнопки - Подключение к серверу с локальным сервером XAMPP

0

Я очень много работал с PHP и MySQL. Теперь я сосредотачиваюсь на создании приложения Android для веб-приложения, созданного и настроенного с использованием PHP-сервера в XAMPP. Моя проблема заключается в том, что приложение закрыто из-за некоторых ошибок во время выполнения, вызванных ошибкой моего кода. Но теперь проблема заключается в том, что приложение закрывается без каких-либо усилий. А также база данных не обновляется данными, которые я ввел в приложение.

addEntry.java:

package localhost80.sample1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.lang.String;

public class addEntry extends AppCompatActivity {

public EditText Eed, Elno, Epar, Epcs, Emts, Ewt, Ect, Egw, Efw, Erem;
public Spinner Evar;
public String str_ed, str_lno, str_par, str_pcs, str_mts, str_wt, str_ct, str_var, str_gw, str_fw, str_rem, str_var_code;
public Button Add, Clr;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_entry);
    addInput();
}

private void addInput() {
    Eed = findViewById(R.id.ed);
    Elno = findViewById(R.id.lno);
    Epar = findViewById(R.id.par);
    Epcs = findViewById(R.id.pcs);
    Emts = findViewById(R.id.mts);
    Ewt = findViewById(R.id.wt);
    Ect = findViewById(R.id.ct);
    Egw = findViewById(R.id.gw);
    Efw = findViewById(R.id.fw);
    Erem = findViewById(R.id.rem);
    Evar = findViewById(R.id.var);
    Add = findViewById(R.id.btnAdd);
    Clr = findViewById(R.id.btnClr);

    Add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            str_ed = (Eed.getText()).toString();
            str_lno = (Elno.getText()).toString();
            str_par = (Epar.getText()).toString();
            str_pcs = (Epcs.getText()).toString();
            str_mts = (Emts.getText()).toString();
            str_wt = (Ewt.getText()).toString();
            str_ct = (Ect.getText()).toString();
            str_gw = (Egw.getText()).toString();
            str_fw = (Efw.getText()).toString();
            str_rem = (Erem.getText()).toString();
            str_var = (Evar.getSelectedItem()).toString();

            switch (Evar.getSelectedItemPosition()) {
                case 0:
                    str_var_code = "fw";
                    break;
                case 1:
                    str_var_code = "brw";
                    break;
                case 2:
                    str_var_code = "mw";
                    break;
                case 3:
                    str_var_code = "bw";
                    break;
                case 4:
                    str_var_code = "ow";
                    break;
            }
            displayToast(str_ed, str_lno, str_par, str_pcs, str_mts, str_wt, str_ct, str_var, str_gw, str_fw, str_rem);
            serverLinking hostlink = new serverLinking(addEntry.this);
            hostlink.execute(str_ed,str_lno,str_par,str_pcs,str_mts,str_wt,str_ct,str_var_code,str_gw,str_fw,str_rem,"POST");
            finish();
         }
    });
    Clr.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Eed.setText("");
            Elno.setText("");
            Epar.setText("");
            Epcs.setText("");
            Emts.setText("");
            Ewt.setText("");
            Ect.setText("");
            Egw.setText("");
            Efw.setText("");
            Erem.setText("");
            Evar.setSelection(0);
        }
    });
}

private void displayToast(String d_ed, String d_lno, String d_par, String d_pcs, String d_mts, String d_wt, String d_ct, String d_var, String d_gw, String d_fw, String d_rem) {
    Toast toast = new Toast(getApplicationContext());
    String toasttext;
    toasttext = "Entry date : " + d_ed + "\nLot no : " + d_lno + "\nParty : " + d_par + "\nTotal Pcs : " + d_pcs + "\nTotal mtrs : " + d_mts + "\nTotal Weight : " + d_wt + "\nCount : " + d_ct + "\nVariety : " + d_var + "\nGray Width : " + d_gw + "\nFinishing Width : " + d_fw + "\nRemarks : " + d_rem;
    toast.setGravity(Gravity.TOP | Gravity.START, 0, 0);
    Toast.makeText(addEntry.this, toasttext, Toast.LENGTH_LONG).show();
}

}

serverLinking.java:

    package localhost80.sample1;

    import android.content.Context;
    import android.os.AsyncTask;
    import android.widget.Toast;

    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;

    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URI;
    import java.net.URL;
    import java.net.URLEncoder;

    public class serverLinking extends AsyncTask<String, Void, String>
    {
private String link;
private Context context;
private String ed,lno,par,pcs,mts,wt,ct,var,gw,fw,remarks,method;

public serverLinking(Context context)
{
    this.context = context;
}

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

@Override
protected String doInBackground(String... arg0)
{
        method = arg0[11];
        link = "http://192.168.0.104/narmadaa_trial1/android/add.php";
        if(method.equals("POST"))
        {
            ed = arg0[0];
            lno = arg0[1];
            par = arg0[2];
            pcs = arg0[3];
            mts = arg0[4];
            wt = arg0[5];
            ct = arg0[6];
            var = arg0[7];
            gw = arg0[8];
            fw = arg0[9];
            remarks = arg0[10];
            try
            {
                URL url = new URL(link);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod(method);
                httpURLConnection.setDoOutput(true);
                OutputStream os = httpURLConnection.getOutputStream();

                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));

                String data = URLEncoder.encode("ed","UTF-8")+"="+URLEncoder.encode("lno","UTF-8")+"="+URLEncoder.encode("par","UTF-8")+"="+
                        URLEncoder.encode("pcs","UTF-8")+"="+URLEncoder.encode("mts","UTF-8")+"="+URLEncoder.encode("wt","UTF-8")+"="+
                        URLEncoder.encode("ct","UTF-8")+"="+URLEncoder.encode("var","UTF-8")+"="+URLEncoder.encode("gw","UTF-8")+"="+
                        URLEncoder.encode("fw","UTF-8")+"="+URLEncoder.encode("remarks","UTF-8");

                bufferedWriter.write(data);
                bufferedWriter.flush();
                bufferedWriter.close();
                os.close();

                InputStream IS = httpURLConnection.getInputStream();
                IS.close();
                return "Data Added Successfully";
            }
            catch (MalformedURLException e){
                e.printStackTrace();
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }
    return null;
}

protected void onPostExecute(String result)
{
    Toast.makeText(context,result,Toast.LENGTH_LONG).show();
}

protected void onProgressUpdate(Void... values)
{
    super.onProgressUpdate(values);
}
    }

Тем не менее я понятия не имею, что случилось с моим кодом. База данных не обновляется при выполнении. Я пропустил часть PHP в этом разделе, насколько мне известно, что нет ничего плохого в файле PHP.

Пожалуйста, помогите мне. Я застрял в этом вопросе.

1 ответ

0

Вы поместите метод finish() непосредственно после запуска async-задачи, так как асинхронная задача фактически запускает новый поток, ваше приложение вызывает метод finish(), а serverLinking все еще работает. Теперь, я не знаю, будет ли андроид автоматически управлять этой проблемой в любом случае, чтобы решить эту проблему, вы можете попробовать поместить финиш() в onPostExecute() следующим образом:

protected void onPostExecute(String result) { 
    Toast.makeText(context,result,Toast.LENGH_LONG).show();
    ((Activity)context).finish();
}

и удалить его с того места, где он сейчас находится. Я не знаю, будет ли это работать, но это не плохая привычка

  • 0
    Спасибо за вашу помощь, я разобрался и попытался показать подробности исключения в toast и обнаружил, что ошибка произошла из-за сбоя соединения с сокетом. Основной причиной не удалось включить разрешения в манифест. Так что я включил <uses-permission android:name="android.permission.INTERNET"/> Это решило мою проблему с подключением. Но теперь возникла другая проблема. Соединение стало стабильным, и я могу добавить данные в базу данных, но все поля, которые я использовал в файле PHP, вводятся как пустые или 0.
  • 0
    О, приятно, рад за тебя! Вы должны опубликовать эту вторую вещь в другом вопросе.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню