2017-10-20 3 views
0

Also werde ich den einfachen Code in ein Programm schreiben, das ich schreibe. Hier ist meine Frage. Ich denke, dass ich gerade eine Verbindung zu meinem Server herstelle (Weil ich dies online poste, ersetze ich die Serveradresse durch eine falsche) und ich möchte wissen, ob ich die Variablen tatsächlich an den Server sende. Ich sende die Daten mit dieser Zeichenfolge an einen PHP-Server ("? Systemid = demo & pwd = demo & Grund = tun% 20Something & qnumber = A36"). Dies ist für Testzwecke fest codiert. Meine Frage ist, schicke ich tatsächlich die Daten? Es scheint keine send() Methode zu geben. Bitte entschuldige meine Ignoranz. Ich bin neu in Android.Senden von Daten an einen Server

Mein Gedanke war, dass wenn ich in den OutputStream schreibe, ich auch die Daten sende. Bitte werfen Sie einen Blick

public class PrintTicketActivity extends AppCompatActivity { 

    private static final String TAG2 = "PrintTicketActivity"; 

    Context mContext; 
    Button mButtonA, mButtonB, mButtonC, mButtonD, mButtonE, mButtonF; 
    List<Button> mButtons; 
    List<PrintJob> mPrintJobs; 
    WebView mWebView; 
    int printJobNum = 1; 

    // here i'm initializing the variables with an arbitrary value so the compiler won't complain 
    // that they may have not been initialized in the button's onclick listeners 
    // these values are overwritten from sharedPreferences anyway.....the file will always exist unless there is a major problem 
    int numA, numB, numC, numD, numE, numF; 
    String buttonA, buttonB, buttonC, buttonD, buttonE, buttonF; 

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

     mContext = this; 
     mButtons = new ArrayList<>(); 
     mPrintJobs = new ArrayList<>(); 

     mButtonA = (Button) findViewById(R.id.button_a); 
     mButtonB = (Button) findViewById(R.id.button_b); 
     mButtonC = (Button) findViewById(R.id.button_c); 
     mButtonD = (Button) findViewById(R.id.button_d); 
     mButtonE = (Button) findViewById(R.id.button_e); 
     mButtonF = (Button) findViewById(R.id.button_f); 

     // add the buttons to the list so we can check later to see if any of the buttons has empty text 
     // and then hide the button if it is empty 
     mButtons.add(mButtonA); 
     mButtons.add(mButtonB); 
     mButtons.add(mButtonC); 
     mButtons.add(mButtonD); 
     mButtons.add(mButtonE); 
     mButtons.add(mButtonF); 


     // check for the start up file 
     File file = new File("data/data/com.myDomain.myProgram/shared_prefs/start.xml"); 

     if (file.exists()) { 

      // place text from preferences on the buttons 
      updateUI(); 

     } else { 
      Toast.makeText(mContext, "Something went wrong", Toast.LENGTH_SHORT).show(); 
     } 

     mButtonA.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       executeQueue(NUMBER_A, numA, "A", mButtonA); 
       new SendQueueToServer().execute(); 

      } 
     }); 
     mButtonB.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       executeQueue(NUMBER_B, numB, "B", mButtonB); 
      } 
     }); 
     mButtonC.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       executeQueue(NUMBER_C, numC, "C", mButtonC); 
      } 
     }); 
     mButtonD.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       executeQueue(NUMBER_D, numD, "D", mButtonD); 
      } 
     }); 
     mButtonE.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       executeQueue(NUMBER_E, numE, "E", mButtonE); 
      } 
     }); 
     mButtonF.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       executeQueue(NUMBER_F, numF, "F", mButtonF); 
      } 
     }); 
    } 

    private void executeQueue(String prefKey, int num, String category, Button button) { 

     printTicket(button.getText().toString(), category + num); 

     // increment the number after printing the ticket 
     ++num; 

     // update the number in the shared preferences 
     SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS, MODE_PRIVATE).edit(); 
     editor.putInt(prefKey, num); 
     editor.apply(); 

     // update the UI to get an updated version of the queue number 
     updateUI(); 
    } 

    private void updateUI() { 
     SharedPreferences preferences = getSharedPreferences(MY_PREFS, MODE_PRIVATE); 
     buttonA = preferences.getString(A, ""); 
     buttonB = preferences.getString(B, ""); 
     buttonC = preferences.getString(C, ""); 
     buttonD = preferences.getString(D, ""); 
     buttonE = preferences.getString(E, ""); 
     buttonF = preferences.getString(F, ""); 
     numA = preferences.getInt(NUMBER_A, 1); 
     numB = preferences.getInt(NUMBER_B, 1); 
     numC = preferences.getInt(NUMBER_C, 1); 
     numD = preferences.getInt(NUMBER_D, 1); 
     numE = preferences.getInt(NUMBER_E, 1); 
     numF = preferences.getInt(NUMBER_F, 1); 

     mButtonA.setText(buttonA); 
     mButtonB.setText(buttonB); 
     mButtonC.setText(buttonC); 
     mButtonD.setText(buttonD); 
     mButtonE.setText(buttonE); 
     mButtonF.setText(buttonF); 

     // if a button doesn't have anything assigned to it, hide the button 
     for (Button button : mButtons) { 
      if (button.getText().equals("")) { 
       button.setVisibility(View.GONE); 
      } 
     } 
    } 

    private void printTicket(String queueTitle, String queueCategory) { 
     // create a WebView object for printing 
     WebView webView = new WebView(mContext); 
     webView.setWebViewClient(new WebViewClient() { 

      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       return false; 
      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 
       Log.i(TAG2, "page finished loading " + url); 
       createWebPrintJob(view); 
       mWebView = null; 
      } 
     }); 

     String html = "<html><body><h2 style=\"text-align:center;font-size:60px\">" + queueTitle + "</h2><h1 style=\"text-align:center" + 
       ";font-size:200px\">" + 
       queueCategory + "</h1>"; 
     webView.loadDataWithBaseURL(null, html, "text/HTML", "UTF-8", null); 

     // Keep a reference to WebView object until you pass the PrintDocumentAdapter 
     // to the PrintManager 
     mWebView = webView; 
    } 

    @SuppressWarnings("deprecation") 
    private void createWebPrintJob(WebView webView) { 
     PrintManager printManager = (PrintManager) mContext.getSystemService(Context.PRINT_SERVICE); 

     // Get a print adapter instance 
     PrintDocumentAdapter printAdapter; 
     if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      printAdapter = webView.createPrintDocumentAdapter("print_job_num" + printJobNum); 
      printJobNum++; 
     } else { 
      printAdapter = webView.createPrintDocumentAdapter(); 
      printJobNum++; 
     } 

     // Create a print job with name and adapter instance 
     String jobName = getString(R.string.app_name) + " Document"; 
     PrintJob printJob = printManager.print(jobName, printAdapter, 
       new PrintAttributes.Builder().build()); 

     // save for status checking later 
     mPrintJobs.add(printJob); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     updateUI(); 
    } 


// @Override 
// public void onBackPressed() { 
//  // don't add superclass constructor 
//  // I am disabling the back button here 
// } 


    private class SendQueueToServer extends AsyncTask<String, String, String> { 

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

      OutputStream out = null; 
      String urlParameters = "?systemid=demo&pwd=demo&reason=do%20something&qnumber=A36"; 
      HttpsURLConnection connection = null; 

      try { 
       URL url = new URL("https://www.example.com/php"); 
       connection = (HttpsURLConnection) url.openConnection(); 
       connection.setRequestMethod("POST"); 
       connection.setDoOutput(true); 
       connection.connect(); 
       out = new DataOutputStream(connection.getOutputStream()); 

       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(out, "UTF-8")); 

       writer.write(urlParameters); 
       writer.flush(); 
       writer.close(); 

       Log.d(TAG2, " and the response is: " + connection.getResponseMessage()); 

       Log.d(TAG2, "you are connected and good to go"); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       assert connection != null; 
       connection.disconnect(); 
      } 
      return null; 
     } 
    } 
} 

Antwort

0

Die URL-Parameter gibt an, dass Sie eine GET-Anfrage zu machen versuchen, und das ist nicht die richtige Vorgehensweise eine HTTP-GET-Anforderung zu machen. Sie müssen nichts in den OutputStreamWriter schreiben, wenn Sie eine GET-Anfrage machen. Hier ist eine Vorlage für das gleiche:

URL url; 
HttpURLConnection urlConnection = null; 
String urlParameters = "?systemid=demo&pwd=demo&reason=do%20something&qnumber=A36"; 

try { 
    url = new URL("https://www.example.com/php"+urlParameters); 

    urlConnection = (HttpURLConnection) url 
      .openConnection(); 

    //use this block of code in case you are looking for some response from your server 
    InputStream in = urlConnection.getInputStream(); 

    InputStreamReader isw = new InputStreamReader(in); 

    int data = isw.read(); 
    while (data != -1) { 
     char current = (char) data; 
     data = isw.read(); 
     System.out.print(current); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    if (urlConnection != null) { 
     urlConnection.disconnect(); 
    }  
} 
0

Sie können Retrofit Library verwenden, um Daten zu Server zu senden. Es ist sehr einfach mit dem Server über diese Bibliothek zu kommunizieren.

Besuchen Sie http://square.github.io/retrofit/ für Tutorial zur Verwendung dieser Bibliothek in Android/Java.