【问题标题】:Android error in postExecute method URL parameters not adding in mysql databasepostExecute方法URL参数中的Android错误未添加到mysql数据库中
【发布时间】:2017-07-15 16:07:01
【问题描述】:

我正在尝试运行一个活动,以便将所有文本信息提交到 mysql 数据库并开始一个新活动,但我总是很遗憾,应用程序已停止

这里是 DonateFood.java 活动

public class DonateFood extends AppCompatActivity {

EditText txt_title, txt_desc, txt_amount, txt_date;
Spinner statuss;
Button btnSubmit;
String array;
String title, amount, desc, date, status;

Context con;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_donate_food);

    txt_title = (EditText)findViewById(R.id.txt_title);
    txt_amount = (EditText)findViewById(R.id.txt_amount);
    txt_desc = (EditText)findViewById(R.id.txt_desc);
    txt_date = (EditText)findViewById(R.id.txt_date);
    statuss = (Spinner)findViewById(R.id.status);
    btnSubmit = (Button) findViewById(R.id.btnSubmit);

    statuss.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

            array=adapterView.getSelectedItem().toString();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

    btnSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            title =  txt_title.getText().toString();
            amount = txt_amount.getText().toString();
            desc = txt_desc.getText().toString();
            date = txt_date.getText().toString();

            String method = "addFood";

            AddFood addFood = new AddFood(con);
            addFood.execute(method,title,amount,desc,date,array);


        }
    });
}


public class AddFood extends AsyncTask<String, Void, String> {
    Context ctx;

    final String TAG = this.getClass().getName();

    //constructor
    AddFood(Context ctx){
        this.ctx=ctx;
    }

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

        String food_url = "http://10.0.3.2/MySqlDemo/addFood.php";

        String method = params[0];
        if(method.equals("addFood")){


            String title = params[1];
            String amount = params[2];
            String desc = params[3];
            String date = params[4];
            String array = params[5];

            try {
                URL url = new URL (food_url);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);
                OutputStream outputStream = httpURLConnection.getOutputStream();
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                String data = URLEncoder.encode("title", "UTF-8")+"="+URLEncoder.encode(title, "UTF-8")+ "&"
                        +URLEncoder.encode("amount", "UTF-8")+"="+URLEncoder.encode(amount, "UTF-8")+ "&"
                        +URLEncoder.encode("desc", "UTF-8")+"="+URLEncoder.encode(desc, "UTF-8")+ "&"
                        +URLEncoder.encode("date", "UTF-8")+"="+URLEncoder.encode(date, "UTF-8")+ "&"
                        +URLEncoder.encode("array", "UTF-8")+"="+URLEncoder.encode(array, "UTF-8");
                bufferedWriter.flush();
                bufferedWriter.close();
                outputStream.close();
                InputStream inputStream = httpURLConnection.getInputStream();
                inputStream.close();

                return "Food added successfully";


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
        return null;
    }

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

    @Override
    protected void onPostExecute(String result) {
        if (result == null) {
            Toast.makeText(ctx,"result was null", Toast.LENGTH_SHORT).show();
            return;
        }

       else if (result.equals("Food added successfully")) {
            Toast.makeText(ctx, result, Toast.LENGTH_SHORT).show();

            ctx.startActivity(new Intent(ctx, FoodView.class));

        }


    }


}

}

logcat 错误:

02-24 17:21:45.465 5871-5871/alsaad.layla.mysqldemo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  java.lang.NullPointerException
                                                                      at android.widget.Toast.<init>(Toast.java:92)
                                                                      at android.widget.Toast.makeText(Toast.java:238)
                                                                      at alsaad.layla.mysqldemo.DonateFood$AddFood.onPostExecute(DonateFood.java:161)
                                                                      at alsaad.layla.mysqldemo.DonateFood$AddFood.onPostExecute(DonateFood.java:90)
                                                                      at android.os.AsyncTask.finish(AsyncTask.java:631)
                                                                      at android.os.AsyncTask.access$600(AsyncTask.java:177)
                                                                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                      at android.os.Looper.loop(Looper.java:137)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5041)
                                                                      at java.lang.reflect.Method.invokeNative(Native Method)
                                                                      at java.lang.reflect.Method.invoke(Method.java:511)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
                                                                      at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

标签: java android mysql


【解决方案1】:

尝试在您的onPostExecute() 中使用getApplicationContext()

Toast.makeText(getApplicationContext(),"result was null", Toast.LENGTH_SHORT).show();

代替:

Toast.makeText(ctx,"result was null", Toast.LENGTH_SHORT).show();

【讨论】:

  • 它工作了。我遇到了另一个问题,为什么当我向数据库添加新值时会得到空白数据?帮助!
  • 它工作得很好.. 但是当我检查我的数据库时添加了空白值
  • 检查 URL ..以及&amp; qotation
  • 我仔细检查了.. 什么也没找到
  • 你没有用:bufferedWriter.write()写参数看这个:stackoverflow.com/questions/9767952/…
【解决方案2】:

请初始化上下文对象

con = getApplicationContext();

【讨论】:

    【解决方案3】:

    您的问题是应用程序无法获取应用程序中的 Context。它没有在任何地方初始化,为了显示一个 toast,我们需要向它传递一个不为空的上下文;

      Context con;
    

    onCreate方法中,只需将应用上下文初始化为

      con = getApplicationContext;
    

    或者干脆

      con = this;
    

    【讨论】:

    • 它成功了。我遇到了另一个问题,为什么我在添加新值时会得到空白数据?帮助!
    • @layla7 您的意思是数据没有正确插入到数据库中。您传递到 URL 中的 URL 编码可能存在一些问题。
    【解决方案4】:

    我认为您没有初始化变量“con”,因此它始终为空,您可以在 onCreate 方法中初始化变量“con”:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ... 
        con = this;
        ...
    }
    

    或者你可以删除你的变量“con”并在你的 btnSubmit onClik 监听器上做这样的事情

    AddFood addFood = new AddFood(DonateFood.this);
    addFood.execute(method,title,amount,desc,date,array);
    

    【讨论】:

      【解决方案5】:

      您没有初始化 Context 对象。 在 oncreate 方法中。只需添加这一行: con = getApplicationContext(); 此外,由于您在主要活动类中。您可以直接使用 getApplicationContext()。

      【讨论】:

        猜你喜欢
        • 2016-11-04
        • 2011-07-14
        • 1970-01-01
        • 2021-06-15
        • 2020-04-11
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多