2017-11-12 1 views
0

나는이 게시물 http://hmkcode.com/android-send-json-data-to-server/을 따르며 일부 기능은 가치가 떨어집니다. 웹 서비스에 정보를 보내는 방법을 알고 싶습니다. 나는 내 코드 내 코드는 몇 가지 실수가 알고 ..게시 요청을 웹 서비스로 보내려면 어떻게해야합니까?

나는 포스트를 업데이트하려고하지만 난 약간의 실수를 가지고 :

enter code here 
package com.example.paulo.myapp.POST; 

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.paulo.myapp.R; 
import com.facebook.internal.BundleJSONConverter; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 


public class Post_Dados extends AppCompatActivity implements View.OnClickListener { 

    TextView isconected; 
    EditText customer, pais, twitter; 
    Button btn_enviar; 
    String person, country, tw; 
    static Dados dados; 

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

     /* recupera as views */ 

     isconected = (TextView) findViewById(R.id.conected); 
     customer = (EditText) findViewById(R.id.customer); 
     pais = (EditText) findViewById(R.id.pais); 
     twitter = (EditText) findViewById(R.id.twitter); 
     btn_enviar = (Button) findViewById(R.id.sendWS); 

     /* checa se está conectado */ 

     if (isConnected()) { 

      isconected.setText("Conectado !!!!"); 
     } 

     else { 

      isconected.setText("Não conectado!!!"); 
     } 


     /* click do botão */ 
     btn_enviar.setOnClickListener(this); 

    } 

    private boolean isConnected() { 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = cm.getActiveNetworkInfo(); 
     if (info != null && info.isConnected()){ 
      return true; 
     } 
     else { return false; } } 

    @Override 
    public void onClick(View view) { 

     String c = customer.getText().toString(); 
     String p = pais.getText().toString(); 
     String t = twitter.getText().toString(); 

       if (c.equals("") || p.equals("") || t.equals("")) 

       { 

      Toast.makeText(getBaseContext(), "Preenche os campos os dados!", Toast.LENGTH_LONG).show(); 


        } 

     else{ 

      new HttpAsyncTask().execute("http://hmkcode.appspot.com/jsonservlet"); 
     } 


    } 



     /*metodo de conexao */ 

    private static String POST(String url, String person) throws IOException, JSONException { 

     InputStream inputStream = null; 
     String result = ""; 

     try{ 

      /* 1. cria o httpClient */ 
      URL endWeb = new URL(url); 
      HttpURLConnection con = (HttpURLConnection) endWeb.openConnection(); 

      // 2. configurando o POST 

      con.setDoOutput(true); 
      con.setRequestMethod("POST"); 
      con.setUseCaches(false); 
      con.setRequestProperty("Accept", "application/json"); 

      //3. define enviar e receber 
      con.setDoOutput(true); 
      con.setDoInput(true); 

      //4.faz a conexao 
      con.connect(); 

      //5. Objeto json 

      String json = " "; 
      JSONObject jsonObject = new JSONObject(); 
      jsonObject.accumulate("name",dados.getNome()); 
      jsonObject.accumulate("country", dados.getEmail()); 
      jsonObject.accumulate("twitter", dados.getTwitter()); 


      //6.connverte json to json string 

      json = jsonObject.toString(); 

      // Escreve o objeto JSON usando o OutputStream da requisição: 
      OutputStream outputStream = con.getOutputStream(); 
      outputStream.write(json.getBytes("UTF-8")); 
     } 

     catch (Exception e){ 
      throw e; 
     } 

     return "ok"; 
    } 


    private class HttpAsyncTask extends AsyncTask<String, Void, String>{ 
     String result; 
     @Override 
     protected String doInBackground(String... urls) { 

      dados = new Dados(person.toString(), country.toString(), tw.toString()); 

      try { 
       result = POST(urls[0], person); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     return result; 
     } 


     // onPostExecute displays the results of the AsyncTask. 
     @Override 
     protected void onPostExecute(String result) { 
      Toast.makeText(getBaseContext(), "Dados enviados!", Toast.LENGTH_LONG).show(); 
     } 
    } 

} 

내가 URL을 http://hmkcode.appspot.com/post-json/index.html는 키우면 확인을 확인하는 것입니다. 나는 그것을 얻는 데 도움이된다.

+0

훨씬 작은 코드로 쉽게 문제를 해결할 수 있습니다. 나는이 모든 코드를 다루지 않는 것을 선호한다. 또한 언어 태그를 추가하여 적절한 잠재 고객을 타겟팅하십시오. –

답변

0

안타깝게도 Android에서 HTTP 요청을 보내는 것은 제 3 자 라이브러리를 사용하지 않으면 상당히 어려울 것입니다. 다행스럽게도 retrofit은 굉장하고 널리 사용됩니다. 많은 자습서가 있습니다. 예를 들어 this one을 시도해보십시오.

관련 문제