2016-07-22 16 views
0

Ich habe folgenden Code geschrieben, um zu posten und Daten vom Server mit okhttp zu bekommen, aber es funktioniert nicht. In NewTest.javaWie kann ich Daten von meiner Android App auf PHP-Server mit okhttp posten?

public class NewTest extends AppCompatActivity { 

    TextView txtJson; 
    Button btnOkay; 

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

     txtJson= (TextView) findViewById(R.id.txtJson); 

     findViewById(R.id.txtJson)).getText().toString()); 

     assert (findViewById(R.id.btnOkay)) != null; 
     (findViewById(R.id.btnOkay)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       new TaskPostWebService("url written here").execute(((TextView) findViewById(R.id.txtJson)).getText().toString()); 
      } 
     }); 

    } 

    private class TaskWebServiceGet extends AsyncTask<String,Void,String> { 

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

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

      try { 

       OkHttpClient client = new OkHttpClient(); 

       Request request = new Request.Builder() 
         .url(params[0]) 
         .build(); 

       Response response = client.newCall(request).execute(); 

       String responseJson = response.body().string(); 
       Log.i("@", "" + responseJson); 
      } 
      catch (Exception e){ 

       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
     } 
    } 

    private class TaskPostWebService extends AsyncTask<String,Void,String> { 
     private String url; 
     private ProgressDialog progressDialog; 

     public TaskPostWebService(String url){ 

      this.url = url; 
     } 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressDialog = ProgressDialog.show(NewTest.this,"",""); 
     } 

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

      String fact = ""; 
      try { 

       OkHttpClient client = new OkHttpClient(); 

       RequestBody body = new FormBody.Builder() 
         .add("\"nonce\" : \"G9Ivek\",", params[0]) 
         .add("\"iUserId \": \"477\",", params[1]) 

          .build(); 

       Request request = new Request.Builder() 
         .url(url) 
         .post(body) 
         .build(); 

       Response response = client.newCall(request).execute(); // hits server 

       String json = response.body().string(); // server gives response 

       ObjectMapper mapper = new ObjectMapper(); 
       Map<String,String> map = mapper.readValue(json, new TypeReference<Map>() { // convert json to object 
       }); 

       if(map != null){ 

        fact = map.get("gruesomeFact"); 

       } 
       Log.i("@",""+json); 
      } 
      catch (Exception e){ 
       e.printStackTrace(); 
      } 
      return fact; 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 

      TextView text = (TextView) findViewById(R.id.txtJson); 
      text.setText(s); 
      progressDialog.dismiss(); 
     } 
    } 

} 

Ich erhalte Zugriff verweigert Meldung.

Kann mir jemand sagen, was los ist.

+0

Haben Sie die 'INTERNET' Erlaubnis in Ihrer Manifest-Datei? – gdros

+0

Ja, ich habe Internet-Berechtigungen in der Android.manifest-Datei. – Rujuta

+0

Bitte weitere Informationen über die Fehlermeldung Sahre Sie bekommen – abarisone

Antwort

0

Antwort-Code als unten. es funktionierte. Jetzt möchte ich Antwort in Listview anzeigen. Wie macht man das?

*/ public class Newtest erweitert AppCompatActivity {

TextView txtJson; 
    Button btnOkay; 

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

     txtJson= (TextView) findViewById(R.id.txtJson); 


     assert (findViewById(R.id.btnOkay)) != null; 
     (findViewById(R.id.btnOkay)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       new TaskPostWebService("written url here").execute(((TextView) 
findViewById(R.id.txtJson)).getText().toString()); 

      } 
     }); 

    } 
    private class TaskPostWebService extends AsyncTask<String,Void,String> { 

     private String url; 
     private ProgressDialog progressDialog; 
     private JSONParser jsonParser; 

     public TaskPostWebService(String url){ 

      this.url = url; 
     } 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressDialog = ProgressDialog.show(NewTest.this,"",""); 
     } 

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

     String fact = ""; 
      try { 

       final MediaType JSON = MediaType.parse("application/json"); 

       android.util.Log.e("charset", "charset - " + JSON.charset()); 
       OkHttpClient client = new OkHttpClient(); 

//Create a JSONObject with the data to be sent to the server 
       final JSONObject dataToSend = new JSONObject() 
         .put("nonce", "G9Ivek") 
         .put("iUserId", "477"); 

       android.util.Log.e("data - ", "data - " + dataToSend.toString()); 

//Create request object 
       Request request = new Request.Builder() 
         .url("written url here") 
         .post(RequestBody.create(JSON, dataToSend.toString().getBytes(Charset.forName("UTF-8")))) 
         .addHeader("Content-Type", "application/json") 
         .build(); 

       android.util.Log.e("request - ", "request - " + request.toString()); 
       android.util.Log.e("headers - ", "headers - " + request.headers().toString()); 
       android.util.Log.e("body - ", "body - " + request.body().toString()); 

//Make the request 
       Response response = client.newCall(request).execute(); 
       android.util.Log.e("response", " " + response.body().string()); //Convert the response to String 
       String responseData = response.body().string(); 

//Construct JSONObject of the response string 
       JSONObject dataReceived = new JSONObject(responseData); 

//See the response from the server 
       Log.i("response data", dataReceived.toString()); 
      } 
      catch (Exception e){ 
       e.printStackTrace(); 
      } 
      return fact; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 

      TextView text = (TextView) findViewById(R.id.txtJson); 
      text.setText(s); 
      progressDialog.dismiss(); 
     } 
    } 

Kindly tell me how to show response of this in listview. Thanks 
+0

Ich bin Androider frischer.Wie JSON Antwort in Listview zu zeigen? Freundlicherweise sagen Sie mir. Vielen Dank. – Rujuta

0

Versuchen Sie, die POST-Anforderung auf folgende Weise in Ihrer doInBackground() Methode zu tun:

private final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 

OkHttpClient client = new OkHttpClient(); 

//Create a JSONObject with the data to be sent to the server 
JSONObject dataToSend = new JSONObject() 
    .put("nonce", "G9Ivek") 
    .put("iUserId", "477"); 

//Create request object 
Request request = new Request.Builder() 
    .url(url) 
    .post(RequestBody.create(JSON, dataToSend.toString())) 
    .build(); 

//Make the request 
Response response = client.newCall(request).execute(); 

//Convert the response to String 
String responseData = response.body().string(); 

//Construct JSONObject of the response string 
JSONObject dataReceived = new JSONObject(responseData); 

//See the response from the server 
Log.i("response data", dataReceived.toString()); 
+0

Ich habe dies geschrieben, aber immer noch den gleichen Fehler. Was ist zu tun? – Rujuta

+0

Sind Sie sicher, dass Ihr Server nur diese Daten erwartet? –

+0

Ja Ich bin sicher, mein Server erwartet {"nonce": "G9Ivek", "iUserId": "477"}. – Rujuta