Java — Android Загрузить изображения (Okhttp3) без интерфейса

Я студент, просто учусь Android развиваться несколько дней,
Там есть вопрос о том, как можно загрузить изображение в фоновом режиме без пользовательского интерфейса.

Я имею в виду, что там уже есть путь к файлу, мне не нужно, чтобы пользователь нажимал для выбора изображений, когда пользователь запускает действие, изображение с автоматической загрузкой. Я знаю, что могу использовать okhttp3, например, видео ниже:

https://www.youtube.com/watch?v=K48jnbM8yS4
(Я думаю, что это хорошее видео, это моя глупая не знаю, как можно изменить код)

Тем не менее, в видео, MainActivity, таких как этот

package app.file_upload;

import android.Manifest;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;

import com.nbsp.materialfilepicker.MaterialFilePicker;
import com.nbsp.materialfilepicker.ui.FilePickerActivity;

import java.io.File;
import java.io.IOException;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class UploadActivity extends AppCompatActivity {

private Button button;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button) findViewById(R.id.button);if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},100);
return;
}
}

enable_button();
}

private void enable_button() {

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new MaterialFilePicker()
.withActivity(UploadActivity.this)
.withRequestCode(10)
.start();

}
});
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == 100 && (grantResults[0] == PackageManager.PERMISSION_GRANTED)){
enable_button();
}else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},100);
}
}
}

ProgressDialog progress;

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
if(requestCode == 10 && resultCode == RESULT_OK){

progress = new ProgressDialog(UploadActivity.this);
progress.setTitle("Uploading");
progress.setMessage("Please wait...");
progress.show();

Thread t = new Thread(new Runnable() {
@Override
public void run() {

File f  = new File(data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH));
String content_type  = getMimeType(f.getPath());

String file_path = f.getAbsolutePath();
OkHttpClient client = new OkHttpClient();
RequestBody file_body = RequestBody.create(MediaType.parse(content_type),f);

RequestBody request_body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("type",content_type)
.addFormDataPart("uploaded_file",file_path.substring(file_path.lastIndexOf("/")+1), file_body)
.build();

Request request = new Request.Builder()
.url("URL_TO_THE_SERVER/YOUR_SCRIPT.php")
.post(request_body)
.build();

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

if(!response.isSuccessful()){
throw new IOException("Error : "+response);
}

progress.dismiss();

} catch (IOException e) {
e.printStackTrace();
}}
});

t.start();}
}

private String getMimeType(String path) {

String extension = MimeTypeMap.getFileExtensionFromUrl(path);

return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
}

для моего случая я только загружаю изображение, но мне не нужен пользовательский интерфейс (Например, кнопка для выбора изображения), поэтому я пытаюсь изменить код, например ниже:

public class MainActivity extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

File f = new File(" /storage/emulated/0/Android/data/abc.package.name/files/images.jpg");
String content_type  = getMimeType(f.getPath());
String file_path = f.getAbsolutePath();

OkHttpClient client = new OkHttpClient();
RequestBody file_body = RequestBody.create(MediaType.parse(content_type),f);

RequestBody request_body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("type",content_type)
.addFormDataPart("uploaded_file",file_path.substring(file_path.lastIndexOf("/")+1), file_body)
.build();

Request request = new Request.Builder()
.url("My php File Link ")
.post(request_body)
.build();

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

if(!response.isSuccessful()){
throw new IOException("Error : "+response);
}} catch (IOException e) {
e.printStackTrace();
}}private String getMimeType(String path) {

String extension = MimeTypeMap.getFileExtensionFromUrl(path);

return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
}

Мне нужно всего лишь использовать okhttp3 для загрузки изображения в фоновом режиме, не нужно никакого интерфейса, но мне трудно, может быть, я новый пользователь студии android …> _<

Может ли кто-нибудь помочь мне изменить код ….

Мой php код также здесь:

<?php

$file_path = "images/";

$file_path = $file_path . basename($_FILES['uploaded_file']['name']);

if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$file_path)) {
echo "success";
}else {
echo "error";
}?>

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]