#android #http-post
#Android #http-post
Вопрос:
Я делаю снимок экрана в своем приложении для Android, используя этот код:
Long tsLong = System.currentTimeMillis()/1000;
final String ts = tsLong.toString();
String mPath =Environment.getExternalStorageDirectory().getAbsolutePath() "/Download/ScreenShot/" ts ".jpg";
// create bitmap screen capture
View v1 = main;
v1.setDrawingCacheEnabled(true);
final Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
File imageFile = new File(mPath);
FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
Затем я отправляю этот снимок экрана на сервер, используя следующее:
String url = "http://website.com/";
StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("takeScreenshot", "onResponse: " response);
}
}, new Response.ErrorListener() { //Create an error listener to handle errors appropriately.
@Override
public void onErrorResponse(VolleyError error) {
Log.e("takeScreenshot", "error: " error);
//This code is executed if there is an error.
}
}) {
protected Map<String, String> getParams() {
Map<String, String> MyData = new HashMap<String, String>();
MyData.put("image_tag", ts);
MyData.put("image_data", getStringImage(bitmap));
return MyData;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(SecondActivity.this);
RetryPolicy mRetryPolicy = new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
MyStringRequest.setRetryPolicy(mRetryPolicy);
requestQueue.add(MyStringRequest);
Этот код отлично работает на любом Android версии 5.0 , но не на 4.1.2, который я использую, по какой-то причине этот код делает снимок экрана и пытается отправить запрос post, но не делает этого, и он не вводит onResponse
или onErrorResponse
Я добавил это RetryPolicy mRetryPolicy = new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
MyStringRequest.setRetryPolicy(mRetryPolicy);
, чтобы попытаться решить мою проблему, но это ничего не дало
Комментарии:
1.
getStringImage(bitmap))
Неясно, что вы отправляете. И какую ошибку вы получаете? Или какой оператор выполняется последним? Или где он зависает? И имеет ли значение, что вы опубликовали код, который сжимает bimap в файл?2.
getStringImage(bitmap))
отправка данных изображенияrequestQueue.add(MyStringRequest);
выполняется последней строкой. и если я удалю данные изображения из запроса post URL, он пройдет, но не с данными изображения, поэтому я добавил код изображения3.
getStringImage(bitmap)) send the image
Нет, это ничего не отправит. И вы не сказали и не показали, что делает это утверждение.4. по сути, в этом заявлении
MyData.put("image_data", getStringImage(bitmap));
отправка данных изображения под именемimage_data
в другом wordgetStringImage(bitmap)
собирает данные изображения и.put()
помещает данные в post-запрос в качестве дополнительных данных. пример: здесь данные отправляются следующим образом:link.././image_tag=nameamp;image_data=dqfqrqeqwfr3232r2t2gf2...
5. Вы все еще не сказали, что делает getStringImage. И что он возвращает. Вы не рассказали и не показали, как вы преобразуете растровое изображение в строку. Или поместите растровое изображение в строку.