Это моя функция:
public class JSONRequest extends AsyncTask <String, Void, JSONObject>{
private JSONCallback activity;
public JSONRequest(JSONCallback activity){
this.activity = activity;
}
@Override
protected JSONObject doInBackground(String... params) {
JSONObject result = null;
}
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
activity.callBack(jsonObject);
}
Чего мне не хватает?
Ты нуждаешься в том, чтобы прочитать файл и обратить это в JSON .
Пример:
JSONObject json;
URL url = new URL("url");
HttpURLConnection conexion = (HttpURLConnection) url.openConnection();
conexion.connect();
InputStream is = conexion.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String linea = "";
while ((linea = br.readLine()) != null){
sb.append(linea);
}
json = new JSONObject(sb.toString());
Восток cГіdigo идет внутри нее funciГіn doInBackground
, и Гєnico, которую ты должен возвращать, - JSON .
Хуан Пабло, проверяя твой код, внутри doInBackground()
тебя Asynctask
ты получаешь String (конечно .json), от которого будет получен один JSONObject
который будет послан в onPostExecute()
:
public class JSONRequest extends AsyncTask <String, Void, JSONObject>{
private JSONCallback activity;
public JSONRequest(JSONCallback activity){
this.activity = activity;
}
@Override
protected JSONObject doInBackground(String... params) {
//Recibe un String en formato .json y obtiene un JSONObject.
JSONObject result = null;
}
protected void onPostExecute(JSONObject jsonObject) {
//Recibe el JSONObject obtenido en doInBackground().
super.onPostExecute(jsonObject);
activity.callBack(jsonObject);
}
На основании предыдущего мы сфокусируемся в методе doInBackground()
, здесь вопрос каков - объект JSON, который ты хочешь получить, заранее нуждаешься в том, чтобы узнать имя, чтобы это получать, например давайте предполагать твой JSONObject он называется "datos"
:
@Override
protected JSONObject doInBackground(String... params) {
//Recibe un String en formato .json y obtiene un JSONObject.
JSONObject data = params[0].getJSONObject("datos");
//JSONObject result = null;
}
Я считаю твой немного широкий вопрос, добавляю пример, в котором ты нуждаешься, регулярно параметр, чтобы инициализировать твой Asynctask, должен быть url файла Json и начиная с этого он получается уже его было один JSONObject
или один JSONArray
, это пример:
class JSONParser extends AsyncTask<String, Void, JSONObject>{
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
String url;
List<NameValuePair> params;
public JSONParser(String url, List<NameValuePair> params) {
this.url = url;
this.params = params;
}
@Override
protected JSONObject doInBackground(String... args) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
Log.e("JSON", json);
} catch (Exception e) {
Log.e("Error", e.getMessage());
}
// Parsea el string a JSONobject.
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// retorna el objeto JSON.
return jObj;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
activity.callBack(jsonObject);
}
}
Используй следующие переменные и внутри OnCreate
private ArrayList<Objeto> Obj;
private Blank_Frangment fragment;
fragment=(Blank_Fra) getFragmentManager().findFragmentById(R.id.fragment);
ты Можешь использовать функцию JSON прямо с с callback, где ты будешь осуществлять это и в onCreate
try {
Obj = new ArrayList<E>();
JSONArray arreglo = jo.getJSONArray("result");
for (int i = 0; i < arreglo.length(); i++){
JSONObject objecto = arreglo.getJSONObject(i);
Clase objetito = new Clase(objecto.getString("Nombre"));
Obj.add(objetito);
}
}catch (Exception e){
}
fragment.AgarraArray(Obj);
И используешь эту функцию, где ты имел, он заносит в список
public void AgarraArray(ArrayList<E> Obj){
MyAdapter adapter = new MyAdapter(getActivity(),Obj);
lista.setAdapter(adapter);
}
И помнит этого, что он увеличивает функции q, ты нуждаешься в том, чтобы использовать из-за default, чтобы мочь изменять
MainActivity extends AppCompatActivity implements Blank_Frangment.OnFragmentInteractionListener, JSONCallback
JSONRequest extends AsyncTask <String, Void, JSONObject>
MyAdapter extends BaseAdapter
Ты нуждаешься в том, чтобы узнать bÃ: sico AsyncTask, это поможет тебе
public class JSONRequest extends AsyncTask <String, Void, JSONObject>{
private JSONCallback activity;
public JSONRequest(JSONCallback activity){
this.activity = activity;
}
@Override
protected JSONObject doInBackground(String... params) {
String json; //Lectura de tu json
try {
return new JSONObject(json);
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(JSONObject jsonObject) {
if(jsonObject) {
activity.callBack(jsonObject);
} else {
activity.callError("El json no se ha podido leer");
}
}
и ты это называешь asà -
new JSONRequest(JSONActivity.this).excecute();
Для чтения твоего json уже зависел бы, откуда ты это достанешь, файла или API, который возвращает json
Ты recomendar¦ - в тот, что ты не использовал AsyncTask для comunicaci¦n с API, или идти из-за специфического контента в сеть, в Android best practices они рекомендуют использование так называемого книжного магазина Retrofit
Однажды, осуществленный этот код, чтобы мочь создавать связь внутри app, - очень важен иметь в твоем XML Manifest
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
, и где ты хочешь послать называть request следующей формы
request = new JSONRequest(this);
request.execute("pagina");
Только recuГ©rdate, что в твоей главной активности ты должен посылать называть это с:
nombre_clase clase = new nombre_clase(actividad);
clase.excute("url");
Как только ты посылаешь называть это в одной funciГіn для того, чтобы я делаю request, и ты должен манипулировать твоим JSONobject с функцией callback.
Если ты хочешь схватить локальный файл с папки, он:
try{
AssetManager manager = getApplicationContext().getAssets();
InputStream is = manager.open("archivo.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String currentLine;
while((currentLine = br.readLine()) != null){
textres.setText(currentLine);
}
}catch (Exception e){
e.printStackTrace();
}
И здесь поскольку ты можешь читать файл с твоего каталога raw
try{
InputStream is = getResources().openRawResource(R.raw.saludo);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String currenLines;
currenLines = br.readLine();
textraw.setText(currenLines);
is.close();
}catch (Exception e){
e.printStackTrace();
}
getView adapter - следующий:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=activity.getLayoutInflater().inflate(R.layout.row,null);
}
TextView nombre = (TextView) convertView.findViewById(R.id.NombreTextView);
TextView hobby = (TextView) convertView.findViewById(R.id.hobbyTextView);
nombre.setText(amigos.get(position).getNombre());
hobby.setText(amigos.get(position).getHobby());
return convertView;
}
Если ты хочешь сделать файл свойства
private final String FILENAME = "name.xml";
Properties properties;
File file = new File(getFilesDir(), FILENAME);
properties = new Properties();
try{
if(file.exists()){
// load values on properties object
FileInputStream fis = openFileInput(FILENAME);
properties.loadFromXML(fis);
fis.close();
} else {
save();
}
}catch(Exception e){
e.printStackTrace();
}
public void save() throws Exception {
saveProperties();
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
properties.storeToXML(fos, null);
fos.close();
}
public void saveProperties(){
properties.setProperty("usuario", inputtext.getText().toString());
}
В лишенном Adapter
ArrayList c; Activity activity;
public MyAdapter(ArrayList<Clase> c , Activity activity) {
this.c = c;
this.activity = activity;
}