Я создал простое приложение для Android с 3 TextViews, а затем запустил задачу AsyncTask через другой класс. Следующим шагом будет передача информации и повторное использование задачи .
Задача будет использовать строку ( URL ) и контекст MainActivity .
Задача сделает простой REST-запрос (GET) и , чтобы получить строку json.
Затем я создал другой класс, который получает ответ json и создает файл .json, сохраняет его в
.... / 0 / Примечания / launch.json
Папка «Заметки» создается мной через file.mkdirs()
.
В MainActivity я создал InputStream для чтения файла .json, сохраненного AsyncTask, но как только я пытаюсь открыть его, он дает мне FileNotFoundException
.
Вот код моего MainActivity.class
package com.example.root.example;
import android.Manifest;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.TextView;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 200);
String url = "https://api.spacexdata.com/v3/launches/upcoming"; //Copy the url and open it in your browser to see the json.
AsyncCall asyncCall = new AsyncCall(getApplicationContext());
asyncCall.myAsyncTask(url);
try {
InputStream inputStream = this.getAssets().open("launch.json");
int size = inputStream.available();
byte[] buffer = new byte[size];
inputStream.read(buffer);
inputStream.close();
String jsonStringFromFile= new String(buffer,"UTF-8");
JSONObject launchObject = new JSONObject(jsonStringFromFile);
System.out.println(launchObject.get("flight_number"));
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Это AsyncCall.class (создание и получение json и т. Д.)
package com.example.root.example;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class AsyncCall {
FileCreator fileCreator = new FileCreator();
private final Context myContext;
public AsyncCall(final Context context) {
myContext = context;
}
public void myAsyncTask(final String url) {
AsyncTask asyncTask = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
fileCreator.generateFile(myContext, myContext.getString(R.string.fileName), response.body().string());
} catch (IOException ioe) {
ioe.getMessage();
}
return null;
}
}.execute();
}
}
что я пытаюсь архивировать? Я пытаюсь сохранить информацию (json здесь) и сделать ее многоразовой, как Falcon 9.
Проблема заключается в переносе информации в другой класс.
Если есть альтернативное решение (кроме сохранения файла .json) для решения этой проблемы, пожалуйста, не стесняйтесь его опубликовать.
Это только моя первая проблема, вторая проблема появляется, когда вы открываете api ссылку и видите, что есть несколько больше, чем одна строка JSON (0,1,2,3,4. .. предстоящие миссии).
Я не имею ни малейшего понятия, как решить первую, не говоря уже о второй, проблему, которая начиналась несколько раз, некоторое время назад.