Enviar solicitud POST a través de datos móviles
Estoy desarrollando una aplicación para Android que envía y recibe datos de un servidor python alojado en pythonanywhere utilizando las solicitudes HTTP y JSON.
La aplicación funciona perfectamente a través de WIFI, pero el problema se produce cuando lo uso a través de Mobile Data. Todos los datos procedentes del servidor con solicitudes GET funcionan perfectamente pero la solicitud POST y DELETE no aparece para enviar o trabajar de otra manera.
- Kivy a Apk en Windows
- ¿Hay alguna manera de llamar a código python en android desarrollar sin instalar sl4a?
- Enviar eventos desde python a javascript usando sl4a
- ¿Cómo puedo empaquetar el intérprete entero de python en un APK de Android?
- Asegurar la comunicación con la aplicación móvil?
No sé si el problema es
- Servidor libre
- Aplicación no confiable
- Permisos
PostRequest.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import android.os.AsyncTask; import android.util.Log; public abstract class PostRequest extends AsyncTask<String,Void,String> { private static String convertInputStreamToString(InputStream inputStream) throws IOException{ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = ""; String result = ""; while((line = bufferedReader.readLine()) != null) result += line; inputStream.close(); return result; } @Override protected String doInBackground(String... params) { InputStream inputstream = null; String result = ""; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost post = new HttpPost(params[0]); StringEntity se = new StringEntity(params[1]); post.setEntity(se); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); HttpResponse httpResponse = httpclient.execute(post); inputstream = httpResponse.getEntity().getContent(); if(inputstream != null) result = convertInputStreamToString(inputstream); else result = "Did not work!"; } catch (Exception e) { Log.i("[ error stream ]", e.toString()); } return result; } @Override abstract public void onPostExecute(String result); }
RequestAddNewStory.java
import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.widget.Button; import android.widget.Toast; import com.shortstory.activities.AddHashtag; import com.shortstory.api.PostRequest; public class RequestAddNewStory extends PostRequest { Context context ; Button AddHashtag ; public RequestAddNewStory(Context context , Button AddHashtag) { this.context = context ; this.AddHashtag = AddHashtag ; } @Override public void onPostExecute(String result) { JSONObject json; try { json = new JSONObject(result); String s = json.getString("message"); if (s.equals("done")) { Toast.makeText(context,"now add hashtags", Toast.LENGTH_LONG).show(); Intent Addhashtag = new Intent(context , AddHashtag.class); context.startActivity(Addhashtag); ((Activity) context).finish(); }else { AddHashtag.setEnabled(true); Toast.makeText(context,"can't add story", Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } } }
Cuando se envíe la solicitud
json.accumulate("user_name", "mkm"); json.accumulate("title", "hello"); json.accumulate("body", "hello all"); json.accumulate("img", " "); RequestAddNewStory rans = new RequestAddNewStory(this , AddHashtag); rans.execute("http://-----.pythonanywhere.com/api/story" , json.toString());
- Error de carga DLL:% 1 no es una aplicación Win32 válida - Appcelerator
- Error de GLS: INVALID_AUDIENCE en los puntos finales de la nube de google
- Recuperación Inception5h modelo de TensorFlow Android Cámara Demo
- Android python scripting: GUI?
- Comprobación del usuario de Foursquare en V2
- Cómo configurar el directorio temporal al crear cyanogenmod
- Android Systrace Ningún archivo ni directorio
- Python + Django en Android
Después de 3 semanas de depuración y ver archivos de registro de servidor y registro de gato del cliente no se encuentra ningún error lógico sucede así que vuelvo a ver las limitaciones de servidor libre pythonanywhere que encontré:
Acceso a sitios externos desde su código, por ejemplo urllib o wget
Sitios específicos sólo a través de HTTP (S)
No sé lo que es punto significa, pero he decidido utilizar https en lugar de http y su trabajo perfecto en wifi y datos móviles
json.accumulate("user_name", "mkm"); json.accumulate("title", "hello"); json.accumulate("body", "hello all"); json.accumulate("img", " "); RequestAddNewStory rans = new RequestAddNewStory(this , AddHashtag); rans.execute("https://-----.pythonanywhere.com/api/story" , json.toString());
Pero todavía no sé si pythonanywhere servidor libre le permiten enviar sus peticiones sólo https por qué http solicitud de trabajo perfecto vía wifi sólo.