2016-01-13 40 views
0

我想要做的是在微調器中選擇文本並將其保存到mysql數據庫中。我需要一些幫助,因爲我不知道如何傳遞字符串並在從微調器獲取字符串後在另一個類中使用它。以下是add_blood_glucose_record.java代碼:如何將在微調器中挑選的文本轉換爲字符串並在其他類中使用

import android.app.DatePickerDialog; 
import android.app.TimePickerDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.InputType; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.TimePicker; 
import android.widget.Toast; 

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.URL; 
import java.net.URLEncoder; 
import java.sql.Time; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Locale; 

public class AddBloodGlucoseRecord extends AppCompatActivity implements View.OnClickListener { 
    Button btnSelectDate,btnSelectTime; 
    private EditText editDate; 
    //private EditText editTime; 

    private DatePickerDialog DatePickerDialog; 
    //private TimePickerDialog TimePickerDialog; 

    private SimpleDateFormat dateFormatter; 
    Spinner spinner; 
    private EditText editPatientID; 
    private EditText edit_sugar_con; 
    String pid,sgrcon,measured,date,selection; 

private String mItemSelectedMessageTemplate; 

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


     mItemSelectedMessageTemplate = 
       getString(R.string.spinner_message_template); 
     Spinner spinner = (Spinner) findViewById(R.id.measured_time); 

     spinner.setOnItemSelectedListener(new SpinnerInfo()); 



     dateFormatter = new SimpleDateFormat("yyyy-MM-dd hh:mm", Locale.TRADITIONAL_CHINESE); 
     findViewsById(); 

     setDateTimeField(); 

     editPatientID = (EditText) findViewById(R.id.editPatientID); 
     edit_sugar_con = (EditText) findViewById(R.id.edit_sugar_con); 
    } 


    private void findViewsById() { 
     btnSelectDate=(Button)findViewById(R.id.edit_date); 
     btnSelectDate.requestFocus(); 
     //editDate.setInputType(InputType.TYPE_NULL); 
     //editDate.requestFocus(); 

     // editTime = (EditText) findViewById(R.id.edit_time); 
     // editTime.setInputType(InputType.TYPE_NULL); 
    } 


    private void setDateTimeField() { 
     btnSelectDate.setOnClickListener(this); 
     //editTime.setOnClickListener(this); 

     Calendar newCalendar = Calendar.getInstance(); 
     DatePickerDialog = new DatePickerDialog(this, new android.app.DatePickerDialog.OnDateSetListener() { 

      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       Calendar newDate = Calendar.getInstance(); 
       newDate.set(year, monthOfYear, dayOfMonth); 
       btnSelectDate.setText(dateFormatter.format(newDate.getTime())); 
      } 

     },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); 
    } 

     /**TimePickerDialog = new TimePickerDialog(this, new android.app.TimePickerDialog.OnTimeSetListener(){ 
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
       Calendar newTime = Calendar.getInstance(); 
       newTime.set(hourOfDay, minute); 
       editTime.setText(newTime.getTime()); 
      } 

     },newCalendar.get(Calendar.HOUR_OF_DAY), newCalendar.get(Calendar.MINUTE)); 
    } 
     **/ 

    private void showToast(String text) { 

     Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 
    } 


public class SpinnerInfo implements AdapterView.OnItemSelectedListener { 
    private boolean isFirst = true; 
    @Override 
    public void onItemSelected(AdapterView<?> spinner, View selectedView, 
           int selectedIndex, long id) { 
     if (isFirst) { 
      isFirst = false; 
     } else { 

      String selection = 
        //spinner.getItemAtPosition(selectedIndex).toString(); 
        spinner.getSelectedItem().toString(); 
      String message = 
        String.format(mItemSelectedMessageTemplate, selection); 
      showToast(message); 
     } 
    } 


    @Override 
    public void onNothingSelected(AdapterView<?> spinner) { 
// Won’t be invoked unless you programmatically remove entries 
    } 
} 

然後我用下面的代碼字符串傳遞給BackgroundTask.java,將數據添加到MySQL數據庫的時候插入按鈕的onClick。到目前爲止,這部分工作就像一個魅力,我可以將正常的editText值傳遞給字符串。我不知道的是如何將在微調框中選擇的文本傳遞給BackgroundTask.java

public void insert(View view){ 
    pid = editPatientID.getText().toString(); 
    if(pid.equals("")) 
    { 
     Toast.makeText(this, "Please enter patient id!", Toast.LENGTH_LONG).show(); 
     return; 
    } 

    sgrcon = edit_sugar_con.getText().toString(); 
    if(sgrcon.equals("")) 
    { 
     Toast.makeText(this, "Please enter sugar concentration!", Toast.LENGTH_LONG).show(); 
     return; 
    } 
    date = btnSelectDate.getText().toString(); 


    measured = spinner.getSelectedItem().toString(); 

    String method = "save"; 
    BackgroundTask backgroundTask = new BackgroundTask(this); 
    backgroundTask.execute(method,pid,sgrcon,date,measured); 

} 

我是編碼和android開發新手。非常感謝您的幫助!!

BackgroundTask.java: 


    public class BackgroundTask extends AsyncTask<String,Void,String> { 
     AlertDialog alertDialog; 
     Context ctx; 
     BackgroundTask(Context ctx) 
     { 
      this.ctx =ctx; 
     } 




     @Override 
     protected void onPreExecute() { 
      alertDialog = new AlertDialog.Builder(ctx).create(); 
      alertDialog.setTitle(""); 
     } 





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


      String save_url = "http://192.168.php"; 
      //String login_url = "http://10.0.2.2/webapp/login.php"; 
      String method = params[0]; 
      if (method.equals("save")) { 
       String pid = params[1]; 
       String sgrcon = params[2]; 
       String date = params[3]; 

       try { 
        URL url = new URL(save_url); 
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
        httpURLConnection.setRequestMethod("POST"); 
        httpURLConnection.setDoOutput(true); 
        //httpURLConnection.setDoInput(true); 
        OutputStream OS = httpURLConnection.getOutputStream(); 
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8")); 
        String data = URLEncoder.encode("pid", "UTF-8") + "=" + URLEncoder.encode(pid, "UTF-8") + "&" + 
          URLEncoder.encode("sgrcon", "UTF-8") + "=" + URLEncoder.encode(sgrcon, "UTF-8") + "&" + 
          URLEncoder.encode("date", "UTF-8") + "=" + URLEncoder.encode(date, "UTF-8")+ 
RLEncoder.encode("measured", "UTF-8") + "=" + URLEncoder.encode(measured, "UTF-8") + 
          URLEncoder.encode("time", "UTF-8") + "=" + URLEncoder.encode(date, "UTF-8"); 
        bufferedWriter.write(data); 
        bufferedWriter.flush(); 
        bufferedWriter.close(); 
        OS.close(); 
        InputStream IS = httpURLConnection.getInputStream(); 
        IS.close(); 
        //httpURLConnection.connect(); 
        httpURLConnection.disconnect(); 
        return "Data is added to patient's profile!!"; 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 

      return null; 
     } 
     @Override 
     protected void onProgressUpdate(Void... values) { 
      super.onProgressUpdate(values); 
     } 
     @Override 
     protected void onPostExecute(String result) { 
      if(result.equals("Data is added to patient's profile!!")) 
      { 
       Toast.makeText(ctx, result, Toast.LENGTH_LONG).show(); 


      } 
      else 
      { 
       alertDialog.setMessage(result); 
       alertDialog.show(); 
      } 
     } 
    } 

錯誤上運行:

01-15 10:34:46.657 14570-14570/com.example.rex.patient4 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.rex.patient4, PID: 14570 
    java.lang.IllegalStateException: Could not execute method for android:onClick 
      at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:278) 
      at android.view.View.performClick(View.java:4764) 
      at android.view.View$PerformClick.run(View.java:19844) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5299) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 
    Caused by: java.lang.reflect.InvocationTargetException 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:273) 
            at android.view.View.performClick(View.java:4764) 
            at android.view.View$PerformClick.run(View.java:19844) 
            at android.os.Handler.handleCallback(Handler.java:739) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5299) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.widget.Spinner.getSelectedItem()' on a null object reference 
      at com.example.rex.patient4.AddBloodGlucoseRecord.insert(AddBloodGlucoseRecord.java:163) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:273) 
            at android.view.View.performClick(View.java:4764) 
            at android.view.View$PerformClick.run(View.java:19844) 
            at android.os.Handler.handleCallback(Handler.java:739) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5299) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 
+0

使用spinner.getSelectedItem()。toString()來獲取選定的文本。 –

+0

你可以再次看看我的代碼。我添加了measured = spinner.getSelectedItem()。toString();但執行錯誤發生 –

回答

0

聲明字符串selection爲公共,然後將它傳遞給後臺像你[R傳遞editext字符串。

+0

我剛剛發佈了我的SecondActivity的代碼。你可以請諮詢我如何在AsynTask下添加onCreate? –

+0

你可以再次看看我的代碼。我添加了measured = spinner.getSelectedItem()。toString(); 但發生執行錯誤。 –

相關問題