【问题标题】:Return a JSON Object Array from class从类中返回一个 JSON 对象数组
【发布时间】:2014-09-18 00:47:39
【问题描述】:

我最近开始尝试自学如何编写 Android 应用程序,但我在理解/实现从我正在调用的类中传递一组结果的方法时遇到了一点困难。

由于我不知道如何完美地布局这个例子,请多多包涵!

我有我的MainActivity,它正在调用类AsyncTaskParseJson(部分来自在线示例的科学怪人)。现在,我的 MainActivity 可以调用该类,并取回一个显示真/假的字符串。我希望将一个数组或转换为字符串的数组返回给我的 MainActivity 以进行进一步处理。

代码:

package jesse.jones.test;

import android.os.AsyncTask;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by Shadow on 9/16/14.
 */

// you can make this class as another java file so it will be separated from your main activity.
public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

    final String TAG = "AsyncTaskParseJson.java";
    String userEmail;
    String userPassword;
    String doAction;
    String reportArray;

    // set your json string url here
    String yourJsonStringUrl = <-url removed->;

    // contacts JSONArray
    JSONArray dataJsonArr = null;

    MainActivity mActivity;

    public AsyncTaskParseJson(MainActivity activity){
        mActivity = activity;


    }

    public void setCredentials(String inUserEmail,String inUserPassword){
        userEmail = inUserEmail;
        userPassword= inUserPassword;
    }

    public void setAction(String actionToTake){
        doAction = actionToTake;
    }

    protected String urlBuilderv1(String actionToTake,String inUserEmail, String inUserPassword){
        String urlString = <-url removed->

        if (actionToTake == "test"){
            urlString = <-url removed->
        }
        if (actionToTake == "login"){
            urlString = <-url removed->
        }

        if (actionToTake == "getReports"){
            urlString = <-url removed->
        }

        return urlString;
    }

    public String getReportArray(){

        return reportArray;
    }

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... arg0) {

        String jsonReturnedResult = "NORETURN";
        String jsonReturnedMessage = null;
        String jsonReturnedReports = null;
        String result = null;

        try {

            // instantiate our json parser
            JasonParser jParser = new JasonParser();

            yourJsonStringUrl = urlBuilderv1(doAction,userEmail,userPassword);

            // get json string from url
            JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);


            jsonReturnedResult = json.get("result").toString();
            //^^ I would like to take this JSONArray back to main activity
            //^^ instead of pulling a single string from it.
            result = jsonReturnedResult;


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

        return result;
    }
    @Override
    protected void onPostExecute(String strFromDoInBg) {

        mActivity.onGetResults(strFromDoInBg);


    }

}

【问题讨论】:

    标签: java android android-studio mobile-application


    【解决方案1】:

    在调用任务引用的 execute() 方法后调用 get() 方法。这基本上会把它变成一个同步任务,但它会给你字符串结果。 AsyncTask 返回的类型是您在“extends AsyncTask”中指定的最后一个“String”。将其更改为您想要返回的任何类型。

    【讨论】:

    • 所以要澄清一下,通过将最后一个“String”更改为“ArrayList”,我可以返回一个数组吗? :P 我可以返回一个字符串没问题。但这只是我需要的完整数据的一小部分。
    • 最后一个 String 只是返回类型。您可以使用 String [] 从您的 doInBackground 方法返回一个字符串数组。
    • 我最终编写了一个返回接口,这样我可以根据需要返回任意数量的字符串、整数、数组。作为这个 android gig 的新手,我没有意识到使用“java”比“android”更容易找到帮助。感谢您的意见!
    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 2013-02-16
    • 2022-07-27
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多