【发布时间】:2017-01-14 21:57:39
【问题描述】:
我应该如何在此代码中实施改造以将图像发送到服务器而不是使用 Volley?我有点困惑,因为我对 Java/Android 有点陌生。我想要一些关于如何使用 Retrofit 来实现这一点的指导,因为 Volley 似乎不起作用。
我基本上是在向我的服务器发送图像的 base64 字符串以及图像名称和稍后的其他一些内容。我还需要从我的服务器检索响应并将其显示在我的应用程序上。 Volley 似乎很容易做到这一点,不确定 Retrofit。
提前致谢
public class MainActivity extends AppCompatActivity {
private ImageButton ImageButton;
private String encoded_string, image_name;
private Bitmap bitmap;
private File file;
private Uri file_uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageButton = (ImageButton) findViewById(R.id.camera);
ImageButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
getFileUri();
i.putExtra(MediaStore.EXTRA_OUTPUT,file_uri);
startActivityForResult(i,10);
}
});
}
private void getFileUri() {
image_name = "testing123.jpeg";
file = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(), image_name);
file_uri = Uri.fromFile(file);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 10 && resultCode == RESULT_OK){
new Encode_image().execute();
}
}
private class Encode_image extends AsyncTask<Void,Void,Void> {
@Override
protected Void doInBackground(Void... voids){
bitmap = BitmapFactory.decodeFile(file_uri.getPath());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
byte[] array = stream.toByteArray();
encoded_string = Base64.encodeToString(array,0);
return null;
}
@Override
protected void onPostExecute(Void aVoid){
makeRequest();
}
}
private void makeRequest() {
final TextView mTextView = (TextView) findViewById(R.id.text);
RequestQueue requestQueue = Volley.newRequestQueue(this);
String URL = "http://128.199.77.211/server/connection.php";
StringRequest request = new StringRequest(Request.Method.POST, URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mTextView.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText("That didn't work!");
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> map = new HashMap<>();
map.put("encoded_string", encoded_string);
map.put("image_name", image_name);
return map;
}
};
requestQueue.add(request);
}
}
【问题讨论】:
标签: java android retrofit retrofit2