2014-02-20 2 views
0

У меня нет ошибок или предупреждений в Eclipse, и я совершенно не знаком с Android-программированием, поэтому я даже не знаю, с чего начать.Приложение для Java/Android неожиданно закрывается/отправляется на сервер

Мое приложение - это простая форма, которую мне нужно отправить в скрипт php в Интернете.

Вот основная часть моей основной деятельности за вычетом импорта. У меня нет ее, чтобы делать что-либо с возвращаемыми значениями или любым из них, а TBH я даже не знаю, что произойдет, если это сработает кроме данных будет в моей БД .. но PHP-скрипт даже не вызывается моим приложением вообще.

на основе вещей, которые я нашел в Google, я попытался -Добавлением поддержки библиотек -Изменения целевой версии SDK от 19 до 18

пожалуйста, что я делаю неправильно?

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

    subm = (Button) findViewById(R.id.button1); 
    fname = (EditText) findViewById(R.id.editText1); 
    lname = (EditText) findViewById(R.id.editText2); 
    addr = (EditText) findViewById(R.id.editText3); 
    city = (EditText) findViewById(R.id.editText4); 
    state = (EditText) findViewById(R.id.editText5); 
    zip = (EditText) findViewById(R.id.editText6); 
    phone = (EditText) findViewById(R.id.editText7); 
    dob = (EditText) findViewById(R.id.editText8); 
    email = (EditText) findViewById(R.id.editText9); 
    ssn = (EditText) findViewById(R.id.editText10); 

    subm.setOnClickListener(
    new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      try{ 

       String httpsURL = "https://example.com/apis/submit_credit_application.php"; 

       String query = "fname="+URLEncoder.encode(fname.getText().toString(),"UTF-8"); 
       query += "&lname="+URLEncoder.encode(lname.getText().toString(),"UTF-8"); 
       query += "&addr="+URLEncoder.encode(addr.getText().toString(),"UTF-8"); 
       query += "&city="+URLEncoder.encode(city.getText().toString(),"UTF-8"); 
       query += "&state="+URLEncoder.encode(state.getText().toString(),"UTF-8"); 
       query += "&zip="+URLEncoder.encode(zip.getText().toString(),"UTF-8"); 
       query += "&phone="+URLEncoder.encode(phone.getText().toString(),"UTF-8"); 
       query += "&dob="+URLEncoder.encode(dob.getText().toString(),"UTF-8"); 
       query += "&email="+URLEncoder.encode(email.getText().toString(),"UTF-8"); 
       query += "&ssn="+URLEncoder.encode(ssn.getText().toString(),"UTF-8"); 

       URL myurl = new URL(httpsURL); 
       HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
       con.setRequestMethod("POST"); 

       con.setRequestProperty("Content-length", String.valueOf(query.length())); 
       con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
       con.setDoOutput(true); 
       con.setDoInput(true); 

       DataOutputStream output = new DataOutputStream(con.getOutputStream()); 
       output.writeBytes(query); 
       output.close(); 


      }catch(IOException e){ 

       Toast.makeText(
        getApplicationContext(), 
        (CharSequence) e, 
        Toast.LENGTH_LONG 
       ).show(); 

      } 

     } 
    }); 
} 

here's a Pastebin with my logcat

+0

У вас есть что-нибудь в своем logCat? –

+3

NetworkOnMainThread Exception. Сетевые вызовы должны идти в другом потоке вне android 2.3. – Peshal

+1

[См. Здесь] (http://stackoverflow.com/questions/18388468/app-crashes-every-time-i-make-an-http-request/18388502# 18388502) – codeMagic

ответ

1

Как вы говорите, вы не можете запускать сетевые задачи в основном потоке. AsyncTasks хороши для выполнения коротких задач, которые вы не хотите блокировать основной поток. Ссылка на документы google. http://developer.android.com/reference/android/os/AsyncTask.html

// This class is just added somewhere in your main activity, like a function. 
private class PostFormTask extends AsyncTask<String, Integer, Long> { 

    protected Long doInBackground(String... queryDetails) { 

    try{ 

      String httpsURL = "https://example.com/apis/submit_credit_application.php"; 

      String query = "fname="+URLEncoder.encode(queryDetails[0],"UTF-8"); 
      query += "&lname="+URLEncoder.encode(queryDetails[1],"UTF-8"); 
      query += "&addr="+URLEncoder.encode(queryDetails[2],"UTF-8"); 
      // Keep adding to your query but instead of getting your details 
      // from the textview they are in the queryDetails array. 


      URL myurl = new URL(httpsURL); 
      HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
      con.setRequestMethod("POST"); 

      con.setRequestProperty("Content-length", String.valueOf(query.length())); 
      con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
      con.setDoOutput(true); 
      con.setDoInput(true); 

      DataOutputStream output = new DataOutputStream(con.getOutputStream()); 
      output.writeBytes(query); 
      output.close(); 


     }catch(IOException e){ 

      Toast.makeText(
       getApplicationContext(), 
       (CharSequence) e, 
       Toast.LENGTH_LONG 
      ).show(); 

     } 
     return false 
    } 

    protected void onPostExecute(Long result) { 

    } 
} 

Тогда на вашем мероприятии OnClick просто.

new PostFormTask().execute(fname.getText().toString(), 
            lname.getText().toString()); 
// just send your form details to your task here, you will want to add all your details 
// from your above code. 

Надеюсь, что это поможет.

1

Хорошо! так как вы хотите, чтобы вы получили два очка. Here - хороший учебник, в котором я называю json-веб-сервис, используя AsyncTask в andorid. В основном AsyncTask создает новый поток, где могут выполняться сетевые операции.

Смежные вопросы